From 2c5e72d1418cb646cf6c4d679b38bd7b8a93fe6f Mon Sep 17 00:00:00 2001 From: Adrien de Peretti Date: Fri, 6 Sep 2024 11:45:32 +0200 Subject: [PATCH] feat: Application types generation from project GQL schema's (#8995) --- .../__tests__/modules/remote-query.spec.ts | 3 - packages/cli/medusa-cli/src/create-cli.ts | 66 +- .../src/cart/steps/get-variant-price-sets.ts | 22 +- .../cart/steps/retrieve-cart-with-links.ts | 20 +- .../src/cart/steps/update-cart-promotions.ts | 9 +- .../src/common/steps/use-remote-query.ts | 4 +- .../steps/set-shipping-options-price-sets.ts | 7 +- .../steps/set-shipping-options-prices.ts | 11 +- .../steps/validate-fulfillment-providers.ts | 12 +- .../steps/validate-inventory-items.ts | 7 +- .../steps/validate-inventory-locations.ts | 7 +- .../steps/validate-variant-price-links.ts | 12 +- .../src/product/steps/get-all-products.ts | 9 +- .../steps/set-regions-payment-providers.ts | 11 +- packages/core/modules-sdk/package.json | 2 + packages/core/modules-sdk/src/index.ts | 1 + packages/core/modules-sdk/src/medusa-app.ts | 90 +- packages/core/modules-sdk/src/remote-query.ts | 2 +- packages/core/modules-sdk/src/types/index.ts | 2 + .../src/utils/gql-schema-to-types.ts | 99 + packages/core/modules-sdk/src/utils/index.ts | 1 + packages/core/types/jest.config.js | 17 + packages/core/types/package.json | 3 +- packages/core/types/src/common/nested-pick.ts | 144 ++ .../modules-sdk/__fixtures__/remote-query.ts | 458 ++++ .../object-to-remote-query-fields.spec.ts | 131 + .../__tests__/remote-query.spec.ts | 56 + packages/core/types/src/modules-sdk/index.ts | 21 +- .../object-to-remote-query-fields.ts | 59 + .../modules-sdk/remote-query-entry-points.ts | 4 + .../remote-query-object-from-string.ts | 22 + .../types/src/modules-sdk/remote-query.ts | 83 + packages/core/types/tsconfig.build.json | 11 + packages/core/types/tsconfig.json | 2 - packages/core/types/tsconfig.spec.json | 8 + .../utils/src/common/__tests__/deep-merge.ts | 46 + .../remote-query-object-from-string.spec.ts | 6 +- packages/core/utils/src/common/deep-merge.ts | 26 + .../src/common/generate-linkable-keys-map.ts | 17 - packages/core/utils/src/common/index.ts | 10 +- .../common/remote-query-object-from-string.ts | 39 +- .../src/modules-sdk/joiner-config-builder.ts | 36 +- packages/core/utils/src/modules-sdk/module.ts | 12 +- packages/framework/framework/src/index.ts | 2 + .../[id]/inbound/items/[action_id]/route.ts | 1 - .../admin/claims/[id]/inbound/items/route.ts | 1 - .../shipping-method/[action_id]/route.ts | 2 - .../[id]/inbound/shipping-method/route.ts | 1 - .../api/admin/claims/[id]/request/route.ts | 2 +- .../[id]/inbound/items/[action_id]/route.ts | 1 - .../exchanges/[id]/inbound/items/route.ts | 1 - .../shipping-method/[action_id]/route.ts | 2 - .../[id]/inbound/shipping-method/route.ts | 1 - .../api/admin/exchanges/[id]/request/route.ts | 2 +- .../medusa/src/api/admin/products/helpers.ts | 4 - .../src/api/admin/promotions/helpers.ts | 2 - .../src/api/admin/returns/[id]/route.ts | 2 +- .../src/api/admin/shipping-options/helpers.ts | 2 - .../products/variant-inventory-quantity.ts | 2 +- .../medusa/src/api/utils/refetch-entity.ts | 3 +- packages/medusa/src/commands/develop.ts | 7 +- packages/medusa/src/commands/start.ts | 16 +- packages/medusa/src/loaders/index.ts | 4 + .../__tests__/api-key-module-service.spec.ts | 12 +- packages/modules/api-key/src/joiner-config.ts | 8 + .../src/services/api-key-module-service.ts | 6 + .../fulfillment-module-service/index.spec.ts | 90 +- .../modules/fulfillment/src/joiner-config.ts | 4 + .../modules/fulfillment/src/schema/index.ts | 167 ++ .../link-modules/src/utils/generate-schema.ts | 123 +- .../integration-tests/__tests__/index.spec.ts | 184 +- packages/modules/order/src/index.ts | 2 +- packages/modules/order/src/joiner-config.ts | 34 + packages/modules/order/src/schema/index.ts | 573 +++++ .../src/services/order-module-service.ts | 6 + .../services/payment-module/index.spec.ts | 11 +- packages/modules/payment/src/joiner-config.ts | 2 + packages/modules/payment/src/schema/index.ts | 111 + packages/modules/pricing/src/joiner-config.ts | 2 + packages/modules/pricing/src/schema/index.ts | 49 +- .../integration-tests/__tests__/product.ts | 8 +- packages/modules/product/src/joiner-config.ts | 6 + packages/modules/product/src/schema/index.ts | 148 ++ .../modules/promotion/src/joiner-config.ts | 2 + .../modules/promotion/src/schema/index.ts | 96 + .../sales-channel/src/joinfer-config.ts | 6 + .../modules/sales-channel/src/schema/index.ts | 12 + .../src/services/sales-channel-module.ts | 6 + .../stock-location-module-service.spec.ts | 19 +- .../stock-location-next/src/joiner-config.ts | 2 + .../stock-location-next/src/schema/index.ts | 29 + yarn.lock | 2188 ++++++++++++++++- 92 files changed, 5129 insertions(+), 443 deletions(-) create mode 100644 packages/core/modules-sdk/src/utils/gql-schema-to-types.ts create mode 100644 packages/core/types/jest.config.js create mode 100644 packages/core/types/src/common/nested-pick.ts create mode 100644 packages/core/types/src/modules-sdk/__fixtures__/remote-query.ts create mode 100644 packages/core/types/src/modules-sdk/__tests__/object-to-remote-query-fields.spec.ts create mode 100644 packages/core/types/src/modules-sdk/__tests__/remote-query.spec.ts create mode 100644 packages/core/types/src/modules-sdk/object-to-remote-query-fields.ts create mode 100644 packages/core/types/src/modules-sdk/remote-query-entry-points.ts create mode 100644 packages/core/types/src/modules-sdk/remote-query-object-from-string.ts create mode 100644 packages/core/types/src/modules-sdk/remote-query.ts create mode 100644 packages/core/types/tsconfig.build.json create mode 100644 packages/core/types/tsconfig.spec.json create mode 100644 packages/core/utils/src/common/__tests__/deep-merge.ts create mode 100644 packages/core/utils/src/common/deep-merge.ts delete mode 100644 packages/core/utils/src/common/generate-linkable-keys-map.ts create mode 100644 packages/modules/api-key/src/joiner-config.ts create mode 100644 packages/modules/fulfillment/src/schema/index.ts create mode 100644 packages/modules/order/src/joiner-config.ts create mode 100644 packages/modules/order/src/schema/index.ts create mode 100644 packages/modules/payment/src/schema/index.ts create mode 100644 packages/modules/product/src/schema/index.ts create mode 100644 packages/modules/promotion/src/schema/index.ts create mode 100644 packages/modules/sales-channel/src/joinfer-config.ts create mode 100644 packages/modules/sales-channel/src/schema/index.ts create mode 100644 packages/modules/stock-location-next/src/schema/index.ts diff --git a/integration-tests/modules/__tests__/modules/remote-query.spec.ts b/integration-tests/modules/__tests__/modules/remote-query.spec.ts index 809429d058..0e3aac61fa 100644 --- a/integration-tests/modules/__tests__/modules/remote-query.spec.ts +++ b/integration-tests/modules/__tests__/modules/remote-query.spec.ts @@ -66,7 +66,6 @@ medusaIntegrationTestRunner({ }, }, }, - undefined, { throwIfKeyNotFound: true } ) @@ -127,7 +126,6 @@ medusaIntegrationTestRunner({ }, }, }, - undefined, { throwIfRelationNotFound: true, } @@ -171,7 +169,6 @@ medusaIntegrationTestRunner({ }, }, }, - undefined, { throwIfRelationNotFound: [Modules.PAYMENT], } diff --git a/packages/cli/medusa-cli/src/create-cli.ts b/packages/cli/medusa-cli/src/create-cli.ts index 3f65750e00..c2be63a32f 100644 --- a/packages/cli/medusa-cli/src/create-cli.ts +++ b/packages/cli/medusa-cli/src/create-cli.ts @@ -342,19 +342,26 @@ function buildLocalCommands(cli, isLocalProject) { command: `develop`, desc: `Start development server. Watches file and rebuilds when something changes`, builder: (_) => - _.option(`H`, { - alias: `host`, - type: `string`, - default: defaultHost, - describe: `Set host. Defaults to ${defaultHost}`, - }).option(`p`, { - alias: `port`, - type: `string`, - default: process.env.PORT || defaultPort, - describe: process.env.PORT - ? `Set port. Defaults to ${process.env.PORT} (set by env.PORT) (otherwise defaults ${defaultPort})` - : `Set port. Defaults to ${defaultPort}`, - }), + _.option("types", { + type: "boolean", + default: true, + describe: + "Generate automated types for modules inside the .medusa directory", + }) + .option(`H`, { + alias: `host`, + type: `string`, + default: defaultHost, + describe: `Set host. Defaults to ${defaultHost}`, + }) + .option(`p`, { + alias: `port`, + type: `string`, + default: process.env.PORT || defaultPort, + describe: process.env.PORT + ? `Set port. Defaults to ${process.env.PORT} (set by env.PORT) (otherwise defaults ${defaultPort})` + : `Set port. Defaults to ${defaultPort}`, + }), handler: handlerP( getCommandHandler(`develop`, (args, cmd) => { process.env.NODE_ENV = process.env.NODE_ENV || `development` @@ -371,19 +378,26 @@ function buildLocalCommands(cli, isLocalProject) { command: `start`, desc: `Start development server.`, builder: (_) => - _.option(`H`, { - alias: `host`, - type: `string`, - default: defaultHost, - describe: `Set host. Defaults to ${defaultHost}`, - }).option(`p`, { - alias: `port`, - type: `string`, - default: process.env.PORT || defaultPort, - describe: process.env.PORT - ? `Set port. Defaults to ${process.env.PORT} (set by env.PORT) (otherwise defaults ${defaultPort})` - : `Set port. Defaults to ${defaultPort}`, - }), + _.option("types", { + type: "boolean", + default: false, + describe: + "Generate automated types for modules inside the .medusa directory", + }) + .option(`H`, { + alias: `host`, + type: `string`, + default: defaultHost, + describe: `Set host. Defaults to ${defaultHost}`, + }) + .option(`p`, { + alias: `port`, + type: `string`, + default: process.env.PORT || defaultPort, + describe: process.env.PORT + ? `Set port. Defaults to ${process.env.PORT} (set by env.PORT) (otherwise defaults ${defaultPort})` + : `Set port. Defaults to ${defaultPort}`, + }), handler: handlerP( getCommandHandler(`start`, (args, cmd) => { process.env.NODE_ENV = process.env.NODE_ENV || `development` diff --git a/packages/core/core-flows/src/cart/steps/get-variant-price-sets.ts b/packages/core/core-flows/src/cart/steps/get-variant-price-sets.ts index 9ea2345c15..b2f9f27ded 100644 --- a/packages/core/core-flows/src/cart/steps/get-variant-price-sets.ts +++ b/packages/core/core-flows/src/cart/steps/get-variant-price-sets.ts @@ -1,6 +1,6 @@ import { IPricingModuleService } from "@medusajs/types" import { MedusaError, ModuleRegistrationName } from "@medusajs/utils" -import { StepResponse, createStep } from "@medusajs/workflows-sdk" +import { createStep, StepResponse } from "@medusajs/workflows-sdk" export interface GetVariantPriceSetsStepInput { variantIds: string[] @@ -24,21 +24,13 @@ export const getVariantPriceSetsStep = createStep( const remoteQuery = container.resolve("remoteQuery") - const variantPriceSets = await remoteQuery( - { - variant: { - fields: ["id"], - price_set: { - fields: ["id"], - }, - }, + const variantPriceSets = await remoteQuery({ + entryPoint: "variant", + fields: ["id", "price_set.id"], + variables: { + id: data.variantIds, }, - { - variant: { - id: data.variantIds, - }, - } - ) + }) const notFound: string[] = [] const priceSetIds: string[] = [] diff --git a/packages/core/core-flows/src/cart/steps/retrieve-cart-with-links.ts b/packages/core/core-flows/src/cart/steps/retrieve-cart-with-links.ts index 965cde4d4b..a756247077 100644 --- a/packages/core/core-flows/src/cart/steps/retrieve-cart-with-links.ts +++ b/packages/core/core-flows/src/cart/steps/retrieve-cart-with-links.ts @@ -1,11 +1,6 @@ import { CartWorkflowDTO } from "@medusajs/types" -import { - ContainerRegistrationKeys, - Modules, - isObject, - remoteQueryObjectFromString, -} from "@medusajs/utils" -import { StepResponse, createStep } from "@medusajs/workflows-sdk" +import { ContainerRegistrationKeys, isObject, Modules } from "@medusajs/utils" +import { createStep, StepResponse } from "@medusajs/workflows-sdk" export interface RetrieveCartWithLinksStepInput { cart_or_cart_id: string | CartWorkflowDTO @@ -29,12 +24,17 @@ export const retrieveCartWithLinksStep = createStep( const remoteQuery = container.resolve( ContainerRegistrationKeys.REMOTE_QUERY ) - const query = remoteQueryObjectFromString({ + const query = { entryPoint: Modules.CART, fields, - }) + variables: { + cart: { + id, + }, + }, + } - const [cart] = await remoteQuery(query, { cart: { id } }) + const [cart] = await remoteQuery(query) return new StepResponse(cart) } diff --git a/packages/core/core-flows/src/cart/steps/update-cart-promotions.ts b/packages/core/core-flows/src/cart/steps/update-cart-promotions.ts index 61e13d982d..6f3c4a8255 100644 --- a/packages/core/core-flows/src/cart/steps/update-cart-promotions.ts +++ b/packages/core/core-flows/src/cart/steps/update-cart-promotions.ts @@ -5,7 +5,7 @@ import { Modules, PromotionActions, } from "@medusajs/utils" -import { StepResponse, createStep } from "@medusajs/workflows-sdk" +import { createStep, StepResponse } from "@medusajs/workflows-sdk" export interface UpdateCartPromotionStepInput { id: string @@ -33,9 +33,10 @@ export const updateCartPromotionsStep = createStep( ) const existingCartPromotionLinks = await remoteQuery({ - cart_promotion: { - __args: { cart_id: [id] }, - fields: ["cart_id", "promotion_id"], + entryPoint: "cart_promotion", + fields: ["cart_id", "promotion_id"], + variables: { + cart_id: [id], }, }) diff --git a/packages/core/core-flows/src/common/steps/use-remote-query.ts b/packages/core/core-flows/src/common/steps/use-remote-query.ts index ef64f4d1e3..e758de3d50 100644 --- a/packages/core/core-flows/src/common/steps/use-remote-query.ts +++ b/packages/core/core-flows/src/common/steps/use-remote-query.ts @@ -2,7 +2,7 @@ import { ContainerRegistrationKeys, remoteQueryObjectFromString, } from "@medusajs/utils" -import { StepResponse, createStep } from "@medusajs/workflows-sdk" +import { createStep, StepResponse } from "@medusajs/workflows-sdk" /** * The remote query's details. @@ -164,7 +164,7 @@ export const useRemoteQueryStep = createStep( : undefined, } - const entities = await query(queryObject, undefined, config) + const entities = await query(queryObjectConfig, config) const result = list ? entities : entities[0] return new StepResponse(result) diff --git a/packages/core/core-flows/src/fulfillment/steps/set-shipping-options-price-sets.ts b/packages/core/core-flows/src/fulfillment/steps/set-shipping-options-price-sets.ts index ae0a2f634a..25febc6a87 100644 --- a/packages/core/core-flows/src/fulfillment/steps/set-shipping-options-price-sets.ts +++ b/packages/core/core-flows/src/fulfillment/steps/set-shipping-options-price-sets.ts @@ -6,7 +6,6 @@ import { LINKS, Modules, promiseAll, - remoteQueryObjectFromString, } from "@medusajs/utils" export type SetShippingOptionsPriceSetsStepInput = { @@ -28,16 +27,14 @@ async function getCurrentShippingOptionPriceSetsLinks( shippingOptionIds: string[], { remoteQuery }: { remoteQuery: RemoteQueryFunction } ): Promise { - const query = remoteQueryObjectFromString({ + const shippingOptionPriceSetLinks = (await remoteQuery({ service: LINKS.ShippingOptionPriceSet, variables: { filters: { shipping_option_id: shippingOptionIds }, take: null, }, fields: ["shipping_option_id", "price_set_id"], - }) - - const shippingOptionPriceSetLinks = (await remoteQuery(query)) as { + } as any)) as { shipping_option_id: string price_set_id: string }[] diff --git a/packages/core/core-flows/src/fulfillment/steps/set-shipping-options-prices.ts b/packages/core/core-flows/src/fulfillment/steps/set-shipping-options-prices.ts index 0c8020c294..c65dd837e1 100644 --- a/packages/core/core-flows/src/fulfillment/steps/set-shipping-options-prices.ts +++ b/packages/core/core-flows/src/fulfillment/steps/set-shipping-options-prices.ts @@ -10,12 +10,11 @@ import { } from "@medusajs/types" import { ContainerRegistrationKeys, + isDefined, LINKS, ModuleRegistrationName, - isDefined, - remoteQueryObjectFromString, } from "@medusajs/utils" -import { StepResponse, createStep } from "@medusajs/workflows-sdk" +import { createStep, StepResponse } from "@medusajs/workflows-sdk" interface PriceRegionId { region_id: string @@ -33,16 +32,14 @@ async function getCurrentShippingOptionPrices( ): Promise< { shipping_option_id: string; price_set_id: string; prices: PriceDTO[] }[] > { - const query = remoteQueryObjectFromString({ + const shippingOptionPrices = (await remoteQuery({ service: LINKS.ShippingOptionPriceSet, variables: { filters: { shipping_option_id: shippingOptionIds }, take: null, }, fields: ["shipping_option_id", "price_set_id", "price_set.prices.*"], - }) - - const shippingOptionPrices = (await remoteQuery(query)) as { + } as any)) as { shipping_option_id: string price_set_id: string price_set: PriceSetDTO diff --git a/packages/core/core-flows/src/fulfillment/steps/validate-fulfillment-providers.ts b/packages/core/core-flows/src/fulfillment/steps/validate-fulfillment-providers.ts index e04a690b9c..e930fa945a 100644 --- a/packages/core/core-flows/src/fulfillment/steps/validate-fulfillment-providers.ts +++ b/packages/core/core-flows/src/fulfillment/steps/validate-fulfillment-providers.ts @@ -3,9 +3,8 @@ import { ContainerRegistrationKeys, MedusaError, ModuleRegistrationName, - remoteQueryObjectFromString, } from "@medusajs/utils" -import { StepResponse, createStep } from "@medusajs/workflows-sdk" +import { createStep, StepResponse } from "@medusajs/workflows-sdk" export type FulfillmentProviderValidationWorkflowInput = { id?: string @@ -21,7 +20,10 @@ export const validateFulfillmentProvidersStepId = */ export const validateFulfillmentProvidersStep = createStep( validateFulfillmentProvidersStepId, - async (input: FulfillmentProviderValidationWorkflowInput[], { container }) => { + async ( + input: FulfillmentProviderValidationWorkflowInput[], + { container } + ) => { const dataToValidate: { service_zone_id: string provider_id: string @@ -83,7 +85,7 @@ export const validateFulfillmentProvidersStep = createStep( ) } - const serviceZoneQuery = remoteQueryObjectFromString({ + const serviceZones = await remoteQuery({ entryPoint: "service_zone", fields: ["id", "fulfillment_set.locations.fulfillment_providers.id"], variables: { @@ -91,8 +93,6 @@ export const validateFulfillmentProvidersStep = createStep( }, }) - const serviceZones = await remoteQuery(serviceZoneQuery) - const serviceZonesMap = new Map< string, ServiceZoneDTO & { diff --git a/packages/core/core-flows/src/inventory/steps/validate-inventory-items.ts b/packages/core/core-flows/src/inventory/steps/validate-inventory-items.ts index 67f565504a..fa1df6c257 100644 --- a/packages/core/core-flows/src/inventory/steps/validate-inventory-items.ts +++ b/packages/core/core-flows/src/inventory/steps/validate-inventory-items.ts @@ -1,8 +1,7 @@ import { + arrayDifference, ContainerRegistrationKeys, MedusaError, - arrayDifference, - remoteQueryObjectFromString, } from "@medusajs/utils" import { createStep } from "@medusajs/workflows-sdk" @@ -17,13 +16,11 @@ export const validateInventoryItems = createStep( ContainerRegistrationKeys.REMOTE_QUERY ) - const query = remoteQueryObjectFromString({ + const items = await remoteQuery({ entryPoint: "inventory_item", variables: { id }, fields: ["id"], }) - - const items = await remoteQuery(query) const diff = arrayDifference( id, items.map(({ id }) => id) diff --git a/packages/core/core-flows/src/inventory/steps/validate-inventory-locations.ts b/packages/core/core-flows/src/inventory/steps/validate-inventory-locations.ts index 5776f3c1b5..aa61204f00 100644 --- a/packages/core/core-flows/src/inventory/steps/validate-inventory-locations.ts +++ b/packages/core/core-flows/src/inventory/steps/validate-inventory-locations.ts @@ -1,8 +1,7 @@ import { + arrayDifference, ContainerRegistrationKeys, MedusaError, - arrayDifference, - remoteQueryObjectFromString, } from "@medusajs/utils" import { InventoryTypes } from "@medusajs/types" @@ -19,7 +18,7 @@ export const validateInventoryLocationsStep = createStep( ContainerRegistrationKeys.REMOTE_QUERY ) - const locationQuery = remoteQueryObjectFromString({ + const stockLocations = await remoteQuery({ entryPoint: "stock_location", variables: { id: data.map((d) => d.location_id), @@ -27,8 +26,6 @@ export const validateInventoryLocationsStep = createStep( fields: ["id"], }) - const stockLocations = await remoteQuery(locationQuery) - const diff = arrayDifference( data.map((d) => d.location_id), stockLocations.map((l) => l.id) diff --git a/packages/core/core-flows/src/price-list/steps/validate-variant-price-links.ts b/packages/core/core-flows/src/price-list/steps/validate-variant-price-links.ts index 7e2bf99e1e..006514e004 100644 --- a/packages/core/core-flows/src/price-list/steps/validate-variant-price-links.ts +++ b/packages/core/core-flows/src/price-list/steps/validate-variant-price-links.ts @@ -1,9 +1,5 @@ -import { - ContainerRegistrationKeys, - MedusaError, - remoteQueryObjectFromString, -} from "@medusajs/utils" -import { StepResponse, createStep } from "@medusajs/workflows-sdk" +import { ContainerRegistrationKeys, MedusaError } from "@medusajs/utils" +import { createStep, StepResponse } from "@medusajs/workflows-sdk" export const validateVariantPriceLinksStepId = "validate-variant-price-links" /** @@ -28,13 +24,11 @@ export const validateVariantPriceLinksStep = createStep( .filter(Boolean) .flat(1) - const variantPricingLinkQuery = remoteQueryObjectFromString({ + const links = await remoteQuery({ entryPoint: "product_variant_price_set", fields: ["variant_id", "price_set_id"], variables: { variant_id: variantIds, take: null }, }) - - const links = await remoteQuery(variantPricingLinkQuery) const variantPriceSetMap: Record = {} for (const link of links) { diff --git a/packages/core/core-flows/src/product/steps/get-all-products.ts b/packages/core/core-flows/src/product/steps/get-all-products.ts index 8bc491bb23..12f688e788 100644 --- a/packages/core/core-flows/src/product/steps/get-all-products.ts +++ b/packages/core/core-flows/src/product/steps/get-all-products.ts @@ -1,8 +1,5 @@ import { FilterableProductProps, RemoteQueryFunction } from "@medusajs/types" -import { - ContainerRegistrationKeys, - remoteQueryObjectFromString, -} from "@medusajs/utils" +import { ContainerRegistrationKeys } from "@medusajs/utils" import { createStep, StepResponse } from "@medusajs/workflows-sdk" export type GetAllProductsStepInput = { @@ -27,7 +24,7 @@ export const getAllProductsStep = createStep( // We intentionally fetch the products serially here to avoid putting too much load on the DB while (true) { - const remoteQueryObject = remoteQueryObjectFromString({ + const { rows: products } = await remoteQuery({ entryPoint: "product", variables: { filters: data.filter, @@ -36,8 +33,6 @@ export const getAllProductsStep = createStep( }, fields: data.select, }) - - const { rows: products } = await remoteQuery(remoteQueryObject) allProducts.push(...products) if (products.length < pageSize) { diff --git a/packages/core/core-flows/src/region/steps/set-regions-payment-providers.ts b/packages/core/core-flows/src/region/steps/set-regions-payment-providers.ts index bfff9b77dd..82280691ce 100644 --- a/packages/core/core-flows/src/region/steps/set-regions-payment-providers.ts +++ b/packages/core/core-flows/src/region/steps/set-regions-payment-providers.ts @@ -1,16 +1,15 @@ import { RemoteLink } from "@medusajs/modules-sdk" import { IPaymentModuleService, RemoteQueryFunction } from "@medusajs/types" import { + arrayDifference, ContainerRegistrationKeys, LINKS, MedusaError, ModuleRegistrationName, Modules, - arrayDifference, promiseAll, - remoteQueryObjectFromString, } from "@medusajs/utils" -import { StepResponse, createStep } from "@medusajs/workflows-sdk" +import { createStep, StepResponse } from "@medusajs/workflows-sdk" export interface SetRegionsPaymentProvidersStepInput { input: { @@ -64,16 +63,14 @@ async function getCurrentRegionPaymentProvidersLinks( [Modules.PAYMENT]: { payment_provider_id: string } }[] > { - const query = remoteQueryObjectFromString({ + const regionProviderLinks = (await remoteQuery({ service: LINKS.RegionPaymentProvider, variables: { filters: { region_id: regionIds }, take: null, }, fields: ["region_id", "payment_provider_id"], - }) - - const regionProviderLinks = (await remoteQuery(query)) as { + } as any)) as { region_id: string payment_provider_id: string }[] diff --git a/packages/core/modules-sdk/package.json b/packages/core/modules-sdk/package.json index 1aad2b27a5..bbf731041b 100644 --- a/packages/core/modules-sdk/package.json +++ b/packages/core/modules-sdk/package.json @@ -27,6 +27,8 @@ "typescript": "^5.1.6" }, "dependencies": { + "@graphql-codegen/cli": "^5.0.2", + "@graphql-codegen/typescript": "^4.0.9", "@graphql-tools/merge": "^9.0.0", "@graphql-tools/schema": "^10.0.0", "@medusajs/orchestration": "^0.5.7", diff --git a/packages/core/modules-sdk/src/index.ts b/packages/core/modules-sdk/src/index.ts index 5658769fee..d6c2b4f151 100644 --- a/packages/core/modules-sdk/src/index.ts +++ b/packages/core/modules-sdk/src/index.ts @@ -5,3 +5,4 @@ export * from "./medusa-module" export * from "./remote-link" export * from "./remote-query" export * from "./types" +export { gqlSchemaToTypes } from "./utils" diff --git a/packages/core/modules-sdk/src/medusa-app.ts b/packages/core/modules-sdk/src/medusa-app.ts index cd8a8da35c..c587c564ea 100644 --- a/packages/core/modules-sdk/src/medusa-app.ts +++ b/packages/core/modules-sdk/src/medusa-app.ts @@ -17,20 +17,24 @@ import { RemoteJoinerOptions, RemoteJoinerQuery, RemoteQueryFunction, + RemoteQueryObjectConfig, + RemoteQueryObjectFromStringResult, } from "@medusajs/types" import { ContainerRegistrationKeys, + createMedusaContainer, + isObject, + isString, MedusaError, ModuleRegistrationName, Modules, ModulesSdkUtils, - createMedusaContainer, - isObject, - isString, promiseAll, + remoteQueryObjectFromString, } from "@medusajs/utils" import type { Knex } from "@mikro-orm/knex" import { asValue } from "awilix" +import { GraphQLSchema } from "graphql/type" import { MODULE_PACKAGE_NAMES } from "./definitions" import { MedusaModule, @@ -227,6 +231,7 @@ export type MedusaAppOutput = { link: RemoteLink | undefined query: RemoteQueryFunction entitiesMap?: Record + gqlSchema?: GraphQLSchema notFound?: Record> runMigrations: RunMigrationFn revertMigrations: RevertMigrationFn @@ -352,15 +357,17 @@ async function MedusaApp_({ ) if (loaderOnly) { + async function query(...args: Parameters) { + throw new Error("Querying not allowed in loaderOnly mode") + } + return { onApplicationShutdown, onApplicationPrepareShutdown, onApplicationStart, modules: allModules, link: undefined, - query: async () => { - throw new Error("Querying not allowed in loaderOnly mode") - }, + query: query as RemoteQueryFunction, runMigrations: async () => { throw new Error("Migrations not allowed in loaderOnly mode") }, @@ -413,11 +420,75 @@ async function MedusaApp_({ customRemoteFetchData: remoteFetchData, }) - const query = async ( - query: string | RemoteJoinerQuery | object, + /** + * Query wrapper to provide specific API's and pre processing around remoteQuery.query + * @param queryConfig + * @param options + */ + async function query( + queryConfig: RemoteQueryObjectConfig, + options?: RemoteJoinerOptions + ): Promise + + async function query< + const TConfig extends RemoteQueryObjectFromStringResult + >(queryConfig: TConfig, options?: RemoteJoinerOptions): Promise + + /** + * Query wrapper to provide specific API's and pre processing around remoteQuery.query + * @param query + * @param options + */ + async function query( + query: RemoteJoinerQuery, + options?: RemoteJoinerOptions + ): Promise + + /** + * Query wrapper to provide specific API's and pre processing around remoteQuery.query + * @param query + * @param options + */ + async function query( + query: + | RemoteJoinerQuery + | RemoteQueryObjectConfig + | RemoteQueryObjectFromStringResult, + options?: RemoteJoinerOptions + ) { + if (!isObject(query)) { + throw new MedusaError( + MedusaError.Types.INVALID_DATA, + "Invalid query, expected object and received something else." + ) + } + + let normalizedQuery: any = query + + if ("__value" in query) { + normalizedQuery = query.__value + } else if ( + "entryPoint" in normalizedQuery || + "service" in normalizedQuery + ) { + normalizedQuery = remoteQueryObjectFromString( + normalizedQuery as Parameters[0] + ).__value + } + + return await remoteQuery.query(normalizedQuery, undefined, options) + } + /** + * Query wrapper to provide specific GraphQL like API around remoteQuery.query + * @param query + * @param variables + * @param options + */ + query.gql = async function ( + query: string, variables?: Record, options?: RemoteJoinerOptions - ) => { + ) { return await remoteQuery.query(query, variables, options) } @@ -524,6 +595,7 @@ async function MedusaApp_({ link: remoteLink, query, entitiesMap: schema.getTypeMap(), + gqlSchema: schema, notFound, runMigrations, revertMigrations, diff --git a/packages/core/modules-sdk/src/remote-query.ts b/packages/core/modules-sdk/src/remote-query.ts index 9ae5bc107b..8a277e5c34 100644 --- a/packages/core/modules-sdk/src/remote-query.ts +++ b/packages/core/modules-sdk/src/remote-query.ts @@ -145,7 +145,7 @@ export class RemoteQuery { return { skip: options.skip, take: options.take, - cursor: options.cursor, + // cursor: options.cursor, not yet supported // TODO: next cursor count, } diff --git a/packages/core/modules-sdk/src/types/index.ts b/packages/core/modules-sdk/src/types/index.ts index 8f816756e5..da8a679ee7 100644 --- a/packages/core/modules-sdk/src/types/index.ts +++ b/packages/core/modules-sdk/src/types/index.ts @@ -7,3 +7,5 @@ export enum MODULE_RESOURCE_TYPE { SHARED = "shared", ISOLATED = "isolated", } + +export { GraphQLSchema } from "graphql" diff --git a/packages/core/modules-sdk/src/utils/gql-schema-to-types.ts b/packages/core/modules-sdk/src/utils/gql-schema-to-types.ts new file mode 100644 index 0000000000..85c938e37b --- /dev/null +++ b/packages/core/modules-sdk/src/utils/gql-schema-to-types.ts @@ -0,0 +1,99 @@ +import { MedusaModule } from "../medusa-module" +import { FileSystem } from "@medusajs/utils" +import { GraphQLSchema } from "graphql/type" +import { parse, printSchema } from "graphql" +import { codegen } from "@graphql-codegen/core" +import * as typescriptPlugin from "@graphql-codegen/typescript" + +function buildEntryPointsTypeMap( + schema: string +): { entryPoint: string; entityType: any }[] { + // build map entry point to there type to be merged and used by the remote query + + const joinerConfigs = MedusaModule.getAllJoinerConfigs() + return joinerConfigs + .flatMap((config) => { + const aliases = Array.isArray(config.alias) + ? config.alias + : config.alias + ? [config.alias] + : [] + + return aliases.flatMap((alias) => { + const names = Array.isArray(alias.name) ? alias.name : [alias.name] + const entity = alias.args?.["entity"] + return names.map((aliasItem) => { + return { + entryPoint: aliasItem, + entityType: entity + ? schema.includes(`export type ${entity} `) + ? alias.args?.["entity"] + : "any" + : "any", + } + }) + }) + }) + .filter(Boolean) +} + +async function generateTypes({ + outputDir, + config, +}: { + outputDir: string + config: Parameters[0] +}) { + const fileSystem = new FileSystem(outputDir) + + let output = await codegen(config) + const entryPoints = buildEntryPointsTypeMap(output) + + const remoteQueryEntryPoints = ` +declare module '@medusajs/types' { + interface RemoteQueryEntryPoints { +${entryPoints + .map((entry) => ` ${entry.entryPoint}: ${entry.entityType}`) + .join("\n")} + } +}` + + output += remoteQueryEntryPoints + + await fileSystem.create("remote-query-types.d.ts", output) + await fileSystem.create( + "index.d.ts", + "export * as RemoteQueryTypes from './remote-query-types'" + ) +} + +export async function gqlSchemaToTypes({ + schema, + outputDir, +}: { + schema: GraphQLSchema + outputDir: string +}) { + const config = { + documents: [], + config: { + scalars: { + DateTime: { output: "Date | string" }, + JSON: { output: "Record" }, + }, + }, + filename: "", + schema: parse(printSchema(schema as any)), + plugins: [ + // Each plugin should be an object + { + typescript: {}, // Here you can pass configuration to the plugin + }, + ], + pluginMap: { + typescript: typescriptPlugin, + }, + } + + await generateTypes({ outputDir, config }) +} diff --git a/packages/core/modules-sdk/src/utils/index.ts b/packages/core/modules-sdk/src/utils/index.ts index d1470bdcbc..4785daaa2b 100644 --- a/packages/core/modules-sdk/src/utils/index.ts +++ b/packages/core/modules-sdk/src/utils/index.ts @@ -1,2 +1,3 @@ export * from "./clean-graphql-schema" export * from "./graphql-schema-to-fields" +export * from "./gql-schema-to-types" diff --git a/packages/core/types/jest.config.js b/packages/core/types/jest.config.js new file mode 100644 index 0000000000..747af0cb05 --- /dev/null +++ b/packages/core/types/jest.config.js @@ -0,0 +1,17 @@ +module.exports = { + moduleNameMapper: {}, + transform: { + "^.+\\.[jt]s$": [ + "@swc/jest", + { + jsc: { + parser: { syntax: "typescript", decorators: true }, + transform: { decoratorMetadata: true }, + }, + }, + ], + }, + testEnvironment: `node`, + moduleFileExtensions: [`js`, `ts`], + modulePathIgnorePatterns: ["dist/"], +} diff --git a/packages/core/types/package.json b/packages/core/types/package.json index 2f883ba034..e86460efae 100644 --- a/packages/core/types/package.json +++ b/packages/core/types/package.json @@ -24,6 +24,7 @@ "awilix": "^8.0.1", "bignumber.js": "^9.1.2", "cross-env": "^5.2.1", + "expect-type": "^0.20.0", "ioredis": "^5.4.1", "rimraf": "^5.0.1", "typescript": "^5.1.6", @@ -31,7 +32,7 @@ "winston": "^3.8.2" }, "scripts": { - "build": "rimraf dist && tsc --build", + "build": "rimraf dist && tsc -p tsconfig.spec.json --noEmit && tsc -p tsconfig.build.json", "watch": "tsc --build --watch", "test": "exit 0" } diff --git a/packages/core/types/src/common/nested-pick.ts b/packages/core/types/src/common/nested-pick.ts new file mode 100644 index 0000000000..1646a91ed6 --- /dev/null +++ b/packages/core/types/src/common/nested-pick.ts @@ -0,0 +1,144 @@ +// TODO: The intent is to manage fields picking from a object, not to act upon at the moment and just keeping it here for reference. + +import { Prettify } from "./common" + +type Split = string extends S + ? string[] + : S extends "" + ? [] + : S extends `${infer T}${D}${infer U}` + ? [T, ...Split] + : [S] + +type NestedPickHelper = Path extends [ + infer First, + ...infer Rest +] + ? First extends keyof T + ? Rest extends string[] + ? Rest["length"] extends 0 + ? T[First] + : T[First] extends Array + ? { + [K in keyof Item as Rest[0] extends "*" + ? K + : K extends Rest[number] + ? K + : never]: Item[K] extends object + ? NestedPickHelper + : Item[K] extends Array + ? NestedPickHelper + : Rest[0] extends "*" + ? Item[K] + : K extends Rest[number] + ? Item[K] + : never + }[] + : T[First] extends object + ? { + [K in keyof T[First] as Rest[0] extends "*" + ? K + : K extends Rest[number] + ? K + : never]: T[First][K] extends object + ? NestedPickHelper + : T[First][K] extends Array + ? NestedPickHelper + : Rest[0] extends "*" + ? T[First][K] + : K extends Rest[number] + ? T[First][K] + : never + } + : First extends "*" + ? { + [K in keyof T]: T[K] + } + : { + [K in keyof T[First] as K extends Rest[number] + ? K + : never]: NestedPickHelper + } + : never + : First extends `${infer ArrayKey}[${infer Index}]` + ? ArrayKey extends keyof T + ? T[ArrayKey] extends (infer U)[] + ? NestedPickHelper + : never + : never + : First extends "*" + ? T + : never + : T + +type UnionToIntersection = (U extends any ? (x: U) => void : never) extends ( + x: infer I +) => void + ? I + : never + +export type NestedPickFirstIteration = { + [P in Props[number] as Split[0] & string]: NestedPickHelper< + T, + Split + > +} + +type NestedPick = { + [K in keyof NestedPickFirstIteration]: Prettify< + NestedPickFirstIteration[K] extends Array + ? UnionToIntersection[] + : UnionToIntersection[K]> + > +} + +type Obj = { + id: string + title: string + variant: { + id: string + description: string + } + options: { id: string; value: string }[] + extra: { + detail: { + name: string + info: { + data: string + } + } + } +} + +type Test = NestedPick< + Obj, + [ + "id", + "variant.description", + "variant.id", + "options.id", + "options.value", + "extra.detail.info.data" + ] +> + +const test: Test = { + id: "test", + variant: { + description: "test", + id: "test", + }, + options: [ + { + id: "test", + value: "test", + }, + ], + extra: { + detail: { + info: { + data: "test", + }, + }, + }, +} diff --git a/packages/core/types/src/modules-sdk/__fixtures__/remote-query.ts b/packages/core/types/src/modules-sdk/__fixtures__/remote-query.ts new file mode 100644 index 0000000000..a2991f6c10 --- /dev/null +++ b/packages/core/types/src/modules-sdk/__fixtures__/remote-query.ts @@ -0,0 +1,458 @@ +export type Maybe = T | null +export type InputMaybe = Maybe +export type Exact = { + [K in keyof T]: T[K] +} +export type MakeOptional = Omit & { + [SubKey in K]?: Maybe +} +export type MakeMaybe = Omit & { + [SubKey in K]: Maybe +} +export type MakeEmpty< + T extends { [key: string]: unknown }, + K extends keyof T +> = { [_ in K]?: never } +export type Incremental = + | T + | { + [P in keyof T]?: P extends " $fragmentName" | "__typename" ? T[P] : never + } + +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: { input: string; output: string } + String: { input: string; output: string } + Boolean: { input: boolean; output: boolean } + Int: { input: number; output: number } + Float: { input: number; output: number } + DateTime: { + input: { output: "Date | string" } + output: { output: "Date | string" } + } + JSON: { + input: { output: "Record" } + output: { output: "Record" } + } +} + +export type SimpleProduct = { + id: Scalars["ID"]["output"] + handle: string + title?: Scalars["String"]["output"] + variants?: Maybe>>> + sales_channels_link?: Array< + Pick + > + sales_channels?: Array> +} + +export type Product = { + __typename?: "Product" + id: Scalars["ID"]["output"] + handle: Scalars["String"]["output"] + title: Scalars["String"]["output"] + description?: Scalars["String"]["output"] + variants?: Array + sales_channels_link?: Array + sales_channels?: Array +} + +export type ProductVariant = { + __typename?: "ProductVariant" + id: Scalars["ID"]["output"] + handle: Scalars["String"]["output"] + title: Scalars["String"]["output"] + product?: Maybe +} + +export type ProductCategory = { + __typename?: "ProductCategory" + id: Scalars["ID"]["output"] + handle: Scalars["String"]["output"] + title?: Maybe +} + +export type SalesChannel = { + __typename?: "SalesChannel" + id: Scalars["ID"]["output"] + name?: Maybe + description?: Maybe + created_at?: Maybe + updated_at?: Maybe + products_link?: Maybe>> + api_keys_link?: Maybe>> + locations_link?: Maybe>> +} + +export type LinkCartPaymentCollection = { + __typename?: "LinkCartPaymentCollection" + cart_id: Scalars["String"]["output"] + payment_collection_id: Scalars["String"]["output"] + createdAt: Scalars["String"]["output"] + updatedAt: Scalars["String"]["output"] + deletedAt?: Maybe +} + +export type LinkCartPromotion = { + __typename?: "LinkCartPromotion" + cart_id: Scalars["String"]["output"] + promotion_id: Scalars["String"]["output"] + createdAt: Scalars["String"]["output"] + updatedAt: Scalars["String"]["output"] + deletedAt?: Maybe +} + +export type LinkLocationFulfillmentProvider = { + __typename?: "LinkLocationFulfillmentProvider" + stock_location_id: Scalars["String"]["output"] + fulfillment_provider_id: Scalars["String"]["output"] + createdAt: Scalars["String"]["output"] + updatedAt: Scalars["String"]["output"] + deletedAt?: Maybe +} + +export type LinkLocationFulfillmentSet = { + __typename?: "LinkLocationFulfillmentSet" + stock_location_id: Scalars["String"]["output"] + fulfillment_set_id: Scalars["String"]["output"] + createdAt: Scalars["String"]["output"] + updatedAt: Scalars["String"]["output"] + deletedAt?: Maybe +} + +export type LinkOrderCart = { + __typename?: "LinkOrderCart" + order_id: Scalars["String"]["output"] + cart_id: Scalars["String"]["output"] + createdAt: Scalars["String"]["output"] + updatedAt: Scalars["String"]["output"] + deletedAt?: Maybe +} + +export type LinkOrderFulfillment = { + __typename?: "LinkOrderFulfillment" + order_id: Scalars["String"]["output"] + fulfillment_id: Scalars["String"]["output"] + createdAt: Scalars["String"]["output"] + updatedAt: Scalars["String"]["output"] + deletedAt?: Maybe +} + +export type LinkOrderPaymentCollection = { + __typename?: "LinkOrderPaymentCollection" + order_id: Scalars["String"]["output"] + payment_collection_id: Scalars["String"]["output"] + createdAt: Scalars["String"]["output"] + updatedAt: Scalars["String"]["output"] + deletedAt?: Maybe +} + +export type LinkOrderPromotion = { + __typename?: "LinkOrderPromotion" + order_id: Scalars["String"]["output"] + promotion_id: Scalars["String"]["output"] + createdAt: Scalars["String"]["output"] + updatedAt: Scalars["String"]["output"] + deletedAt?: Maybe +} + +export type LinkReturnFulfillment = { + __typename?: "LinkReturnFulfillment" + return_id: Scalars["String"]["output"] + fulfillment_id: Scalars["String"]["output"] + createdAt: Scalars["String"]["output"] + updatedAt: Scalars["String"]["output"] + deletedAt?: Maybe +} + +export type LinkProductSalesChannel = { + __typename?: "LinkProductSalesChannel" + product_id: Scalars["String"]["output"] + sales_channel_id: Scalars["String"]["output"] + product?: Maybe + sales_channel?: Maybe + createdAt: Scalars["String"]["output"] + updatedAt: Scalars["String"]["output"] + deletedAt?: Maybe +} + +export type LinkProductVariantInventoryItem = { + __typename?: "LinkProductVariantInventoryItem" + variant_id: Scalars["String"]["output"] + inventory_item_id: Scalars["String"]["output"] + required_quantity: Scalars["Int"]["output"] + variant?: Maybe + createdAt: Scalars["String"]["output"] + updatedAt: Scalars["String"]["output"] + deletedAt?: Maybe +} + +export type LinkProductVariantPriceSet = { + __typename?: "LinkProductVariantPriceSet" + variant_id: Scalars["String"]["output"] + price_set_id: Scalars["String"]["output"] + variant?: Maybe + createdAt: Scalars["String"]["output"] + updatedAt: Scalars["String"]["output"] + deletedAt?: Maybe +} + +export type LinkPublishableApiKeySalesChannel = { + __typename?: "LinkPublishableApiKeySalesChannel" + publishable_key_id: Scalars["String"]["output"] + sales_channel_id: Scalars["String"]["output"] + sales_channel?: Maybe + createdAt: Scalars["String"]["output"] + updatedAt: Scalars["String"]["output"] + deletedAt?: Maybe +} + +export type LinkRegionPaymentProvider = { + __typename?: "LinkRegionPaymentProvider" + region_id: Scalars["String"]["output"] + payment_provider_id: Scalars["String"]["output"] + createdAt: Scalars["String"]["output"] + updatedAt: Scalars["String"]["output"] + deletedAt?: Maybe +} + +export type LinkSalesChannelStockLocation = { + __typename?: "LinkSalesChannelStockLocation" + sales_channel_id: Scalars["String"]["output"] + stock_location_id: Scalars["String"]["output"] + sales_channel?: Maybe + createdAt: Scalars["String"]["output"] + updatedAt: Scalars["String"]["output"] + deletedAt?: Maybe +} + +export type LinkShippingOptionPriceSet = { + __typename?: "LinkShippingOptionPriceSet" + shipping_option_id: Scalars["String"]["output"] + price_set_id: Scalars["String"]["output"] + createdAt: Scalars["String"]["output"] + updatedAt: Scalars["String"]["output"] + deletedAt?: Maybe +} + +export interface FixtureEntryPoints { + file: any + files: any + workflow_execution: any + workflow_executions: any + inventory_items: any + inventory_item: any + inventory: any + reservation: any + reservations: any + reservation_item: any + reservation_items: any + inventory_level: any + inventory_levels: any + stock_location_address: any + stock_location_addresses: any + stock_location: any + stock_locations: any + price_set: any + price_sets: any + price_list: any + price_lists: any + price: any + prices: any + price_preference: any + price_preferences: any + product_variant: ProductVariant + product_variants: ProductVariant + variant: ProductVariant + variants: ProductVariant + product: Product + products: Product + simple_product: SimpleProduct + product_option: any + product_options: any + product_type: any + product_types: any + product_image: any + product_images: any + product_tag: any + product_tags: any + product_collection: any + product_collections: any + product_category: ProductCategory + product_categories: ProductCategory + sales_channel: SalesChannel + sales_channels: SalesChannel + customer_address: any + customer_addresses: any + customer_group_customer: any + customer_group_customers: any + customer_group: any + customer_groups: any + customer: any + customers: any + cart: any + carts: any + address: any + addresses: any + line_item: any + line_items: any + line_item_adjustment: any + line_item_adjustments: any + line_item_tax_line: any + line_item_tax_lines: any + shipping_method: any + shipping_methods: any + shipping_method_adjustment: any + shipping_method_adjustments: any + shipping_method_tax_line: any + shipping_method_tax_lines: any + promotion: any + promotions: any + campaign: any + campaigns: any + promotion_rule: any + promotion_rules: any + api_key: any + api_keys: any + tax_rate: any + tax_rates: any + tax_region: any + tax_regions: any + tax_rate_rule: any + tax_rate_rules: any + tax_provider: any + tax_providers: any + store: any + stores: any + store_currency: any + store_currencies: any + user: any + users: any + invite: any + invites: any + auth_identity: any + auth_identities: any + order: any + orders: any + order_address: any + order_addresses: any + order_line_item: any + order_line_items: any + order_line_item_adjustment: any + order_line_item_adjustments: any + order_line_item_tax_line: any + order_line_item_tax_lines: any + order_shipping_method: any + order_shipping_methods: any + order_shipping_method_adjustment: any + order_shipping_method_adjustments: any + order_shipping_method_tax_line: any + order_shipping_method_tax_lines: any + order_transaction: any + order_transactions: any + order_change: any + order_changes: any + order_change_action: any + order_change_actions: any + order_item: any + order_items: any + order_summary: any + order_summaries: any + order_shipping: any + order_shippings: any + return_reason: any + return_reasons: any + return: any + returns: any + return_item: any + return_items: any + order_claim: any + order_claims: any + order_claim_item: any + order_claim_items: any + order_claim_item_image: any + order_claim_item_images: any + order_exchange: any + order_exchanges: any + order_exchange_item: any + order_exchange_items: any + payment: any + payments: any + payment_collection: any + payment_collections: any + payment_provider: any + payment_providers: any + payment_session: any + payment_sessions: any + refund_reason: any + refund_reasons: any + fulfillment_address: any + fulfillment_addresses: any + fulfillment_item: any + fulfillment_items: any + fulfillment_label: any + fulfillment_labels: any + fulfillment_provider: any + fulfillment_providers: any + fulfillment_set: any + fulfillment_sets: any + fulfillment: any + fulfillments: any + geo_zone: any + geo_zones: any + service_zone: any + service_zones: any + shipping_option_rule: any + shipping_option_rules: any + shipping_option_type: any + shipping_option_types: any + shipping_option: any + shipping_options: any + shipping_profile: any + shipping_profiles: any + notification: any + notifications: any + region: any + regions: any + country: any + countries: any + currency: any + currencies: any + cart_payment_collection: LinkCartPaymentCollection + cart_payment_collections: LinkCartPaymentCollection + cart_promotion: LinkCartPromotion + cart_promotions: LinkCartPromotion + location_fulfillment_provider: LinkLocationFulfillmentProvider + location_fulfillment_providers: LinkLocationFulfillmentProvider + location_fulfillment_set: LinkLocationFulfillmentSet + location_fulfillment_sets: LinkLocationFulfillmentSet + order_cart: LinkOrderCart + order_carts: LinkOrderCart + order_fulfillment: LinkOrderFulfillment + order_fulfillments: LinkOrderFulfillment + order_payment_collection: LinkOrderPaymentCollection + order_payment_collections: LinkOrderPaymentCollection + order_promotion: LinkOrderPromotion + order_promotions: LinkOrderPromotion + return_fulfillment: LinkReturnFulfillment + return_fulfillments: LinkReturnFulfillment + product_sales_channel: LinkProductSalesChannel + product_sales_channels: LinkProductSalesChannel + product_variant_inventory_item: LinkProductVariantInventoryItem + product_variant_inventory_items: LinkProductVariantInventoryItem + product_variant_price_set: LinkProductVariantPriceSet + product_variant_price_sets: LinkProductVariantPriceSet + publishable_api_key_sales_channel: LinkPublishableApiKeySalesChannel + publishable_api_key_sales_channels: LinkPublishableApiKeySalesChannel + region_payment_provider: LinkRegionPaymentProvider + region_payment_providers: LinkRegionPaymentProvider + sales_channel_location: LinkSalesChannelStockLocation + sales_channel_locations: LinkSalesChannelStockLocation + shipping_option_price_set: LinkShippingOptionPriceSet + shipping_option_price_sets: LinkShippingOptionPriceSet +} + +declare module "../remote-query-entry-points" { + export interface RemoteQueryEntryPoints extends FixtureEntryPoints {} +} diff --git a/packages/core/types/src/modules-sdk/__tests__/object-to-remote-query-fields.spec.ts b/packages/core/types/src/modules-sdk/__tests__/object-to-remote-query-fields.spec.ts new file mode 100644 index 0000000000..5f97bf7f46 --- /dev/null +++ b/packages/core/types/src/modules-sdk/__tests__/object-to-remote-query-fields.spec.ts @@ -0,0 +1,131 @@ +import { ObjectToRemoteQueryFields } from "../object-to-remote-query-fields" +import { expectTypeOf } from "expect-type" + +describe("ObjectToRemoteQueryFields", () => { + it("should return all the nested paths properties from an object", () => { + type Object = { + id: string + title: string + description: string + date: Date + variants: { + id: string + sku: string + title: string + }[] + sales_channel: { + id: string + name: string + value: string + } + metadata: Record + } + + type Paths = ObjectToRemoteQueryFields + + expectTypeOf().toEqualTypeOf< + | "*" + | "date" + | "metadata" + | "id" + | "title" + | "description" + | "variants.*" + | "variants.id" + | "variants.sku" + | "variants.title" + | "sales_channel.*" + | "sales_channel.id" + | "sales_channel.name" + | "sales_channel.value" + >() + }) + + it("should return all the nested paths properties from an object with nullable and undefined", () => { + type Maybe = T | null + + type Object = { + id: string + title: string + description: string + date: Date + variants: Maybe< + Maybe<{ + id: string + sku: string + title: string + }>[] + > + sales_channel?: Maybe<{ + id: string + name: string + value: string + }> + metadata: Record + } + + type Paths = ObjectToRemoteQueryFields + + expectTypeOf().toEqualTypeOf< + | "*" + | "id" + | "metadata" + | "date" + | "title" + | "description" + | "variants.*" + | "variants.id" + | "variants.sku" + | "variants.title" + | "sales_channel.*" + | "sales_channel.id" + | "sales_channel.name" + | "sales_channel.value" + >() + }) + + it("should fail return all the nested paths properties from an object with nullable and undefined", () => { + type Maybe = T | null + + type Object = { + id: string + title: string + description: string + date: Date + variants: Maybe< + Maybe<{ + id: string + sku: string + title: string + }>[] + > + sales_channel?: Maybe<{ + id: string + name: string + value: string + }> + metadata: Record + } + + type Paths = ObjectToRemoteQueryFields + + expectTypeOf().toEqualTypeOf< + // @ts-expect-error + | "foo" + | "*" + | "date" + | "metadata" + | "id" + | "title" + | "description" + | "variants.*" + | "variants.id" + | "variants.sku" + | "variants.title" + | "sales_channel.*" + | "sales_channel.id" + | "sales_channel.name" + | "sales_channel.value" + >() + }) +}) diff --git a/packages/core/types/src/modules-sdk/__tests__/remote-query.spec.ts b/packages/core/types/src/modules-sdk/__tests__/remote-query.spec.ts new file mode 100644 index 0000000000..96614a45b9 --- /dev/null +++ b/packages/core/types/src/modules-sdk/__tests__/remote-query.spec.ts @@ -0,0 +1,56 @@ +import { expectTypeOf } from "expect-type" +import { RemoteQueryEntryPoints } from "../remote-query-entry-points" +import { FixtureEntryPoints } from "../__fixtures__/remote-query" +import { RemoteQueryObjectConfig } from "../remote-query-object-from-string" + +describe("RemoteQuery", () => { + describe("RemoteQueryEntryPoints", () => { + it("should include declaration merging types with the defined entry points", () => { + expectTypeOf().toMatchTypeOf() + }) + }) + + describe("RemoteQueryObjectConfig", () => { + it("should return the correct type for fields when using a string entry point", () => { + type Result = RemoteQueryObjectConfig<"simple_product">["fields"] + expectTypeOf().toEqualTypeOf< + ( + | "*" + | "id" + | "handle" + | "title" + | "variants.id" + | "variants.*" + | "sales_channels.id" + | "sales_channels.*" + | "sales_channels.name" + | "sales_channels_link.*" + | "sales_channels_link.product_id" + | "sales_channels_link.sales_channel_id" + )[] + >() + }) + + it("should fail return the correct type for fields when using a string entry point", () => { + type Result = RemoteQueryObjectConfig<"simple_product">["fields"] + expectTypeOf().toEqualTypeOf< + // @ts-expect-error + ( + | "*" + | "foo" + | "id" + | "handle" + | "title" + | "variants.id" + | "variants.*" + | "sales_channels.id" + | "sales_channels.*" + | "sales_channels.name" + | "sales_channels_link.*" + | "sales_channels_link.product_id" + | "sales_channels_link.sales_channel_id" + )[] + >() + }) + }) +}) diff --git a/packages/core/types/src/modules-sdk/index.ts b/packages/core/types/src/modules-sdk/index.ts index d16824c43b..e9187c2967 100644 --- a/packages/core/types/src/modules-sdk/index.ts +++ b/packages/core/types/src/modules-sdk/index.ts @@ -1,19 +1,22 @@ -import { - JoinerRelationship, - JoinerServiceConfig, - RemoteJoinerOptions, - RemoteJoinerQuery, -} from "../joiner" +import { JoinerRelationship, JoinerServiceConfig } from "../joiner" import { MedusaContainer } from "../common" import { RepositoryService } from "../dal" import { Logger } from "../logger" +import { + RemoteQueryObjectConfig, + RemoteQueryObjectFromStringResult, +} from "./remote-query-object-from-string" + +export { RemoteQueryObjectConfig, RemoteQueryObjectFromStringResult } export type Constructor = new (...args: any[]) => T | (new () => T) export * from "../common/medusa-container" export * from "./medusa-internal-service" export * from "./module-provider" +export * from "./remote-query" +export * from "./remote-query-entry-points" export type LogLevel = | "query" @@ -292,12 +295,6 @@ export type ModuleBootstrapDeclaration = // | ModuleServiceInitializeOptions // | ModuleServiceInitializeCustomDataLayerOptions -export type RemoteQueryFunction = ( - query: string | RemoteJoinerQuery | object, - variables?: Record, - options?: RemoteJoinerOptions -) => Promise | null - export interface IModuleService { /** * @ignore diff --git a/packages/core/types/src/modules-sdk/object-to-remote-query-fields.ts b/packages/core/types/src/modules-sdk/object-to-remote-query-fields.ts new file mode 100644 index 0000000000..d0980d99fd --- /dev/null +++ b/packages/core/types/src/modules-sdk/object-to-remote-query-fields.ts @@ -0,0 +1,59 @@ +type Marker = [never, 0, 1, 2, 3, 4] + +type ExcludedProps = ["__typename"] +type SpecialNonRelationProps = ["metadata"] +type RawBigNumberPrefix = "raw_" + +type ExpandStarSelector< + T extends object, + Depth extends number, + Exclusion extends string[] +> = ObjectToRemoteQueryFields + +type TypeOnly = Required> + +/** + * Output an array of strings representing the path to each leaf node in an object + */ +export type ObjectToRemoteQueryFields< + MaybeT, + Depth extends number = 2, + Exclusion extends string[] = [], + T = TypeOnly & { "*": "*" } +> = Depth extends never + ? never + : T extends object + ? { + [K in keyof T]: K extends // handle big number + `${RawBigNumberPrefix}${string}` + ? Exclude + : // handle metadata + K extends SpecialNonRelationProps[number] + ? Exclude + : // Special props that should be excluded + K extends ExcludedProps[number] + ? never + : // Prevent recursive reference to itself + K extends Exclusion[number] + ? never + : TypeOnly extends Array + ? TypeOnly extends Date + ? Exclude + : TypeOnly extends object + ? `${Exclude}.${ExpandStarSelector< + TypeOnly, + Marker[Depth], + [K & string, ...Exclusion] + >}` + : never + : TypeOnly extends Date + ? Exclude + : TypeOnly extends object + ? `${Exclude}.${ExpandStarSelector< + TypeOnly, + Marker[Depth], + [K & string, ...Exclusion] + >}` + : Exclude + }[keyof T] + : never diff --git a/packages/core/types/src/modules-sdk/remote-query-entry-points.ts b/packages/core/types/src/modules-sdk/remote-query-entry-points.ts new file mode 100644 index 0000000000..8821791166 --- /dev/null +++ b/packages/core/types/src/modules-sdk/remote-query-entry-points.ts @@ -0,0 +1,4 @@ +/** + * Bucket filled with map of entry point -> types that are autogenerated by the CLI + */ +export interface RemoteQueryEntryPoints {} diff --git a/packages/core/types/src/modules-sdk/remote-query-object-from-string.ts b/packages/core/types/src/modules-sdk/remote-query-object-from-string.ts new file mode 100644 index 0000000000..4dcabe0e8d --- /dev/null +++ b/packages/core/types/src/modules-sdk/remote-query-object-from-string.ts @@ -0,0 +1,22 @@ +import { RemoteQueryEntryPoints } from "./remote-query-entry-points" +import { ObjectToRemoteQueryFields } from "./object-to-remote-query-fields" + +export type RemoteQueryObjectConfig = { + // service: string This property is still supported under the hood but part of the type due to types missmatch towards fields + entryPoint: TEntry | keyof RemoteQueryEntryPoints + variables?: any + fields: ObjectToRemoteQueryFields< + RemoteQueryEntryPoints[TEntry & keyof RemoteQueryEntryPoints] + > extends never + ? string[] + : ObjectToRemoteQueryFields< + RemoteQueryEntryPoints[TEntry & keyof RemoteQueryEntryPoints] + >[] +} + +export type RemoteQueryObjectFromStringResult< + TConfig extends RemoteQueryObjectConfig +> = { + __TConfig: TConfig + __value: object +} diff --git a/packages/core/types/src/modules-sdk/remote-query.ts b/packages/core/types/src/modules-sdk/remote-query.ts new file mode 100644 index 0000000000..10238d8199 --- /dev/null +++ b/packages/core/types/src/modules-sdk/remote-query.ts @@ -0,0 +1,83 @@ +import { RemoteJoinerOptions, RemoteJoinerQuery } from "../joiner" +import { + RemoteQueryObjectConfig, + RemoteQueryObjectFromStringResult, +} from "./remote-query-object-from-string" + +/*type ExcludedProps = "__typename"*/ + +export type RemoteQueryFunctionReturnPagination = { + skip: number + take: number + count: number +} + +/*export type RemoteQueryReturnedData = + TEntry extends keyof RemoteQueryEntryPoints + ? Prettify> + : any*/ + +/*export type NarrowRemoteFunctionReturnType< + TConfig extends RemoteQueryObjectConfig +> = TConfig extends RemoteQueryObjectConfig + ? TConfig extends { variables: infer Variables } + ? Variables extends { skip: number } + ? { + rows: RemoteQueryReturnedData[] + metadata: RemoteQueryFunctionReturnPagination + } + : Variables extends { skip?: number | undefined } | { skip?: number } + ? // TODO: the real type is the one in parenthsis but we put any for now as the current API is broken and need fixin in a separate iteration (RemoteQueryReturnedData[] | {rows: RemoteQueryReturnedData[] metadata: RemoteQueryFunctionReturnPagination }) + any + : RemoteQueryReturnedData[] + : RemoteQueryReturnedData[] + : never*/ + +/*export type RemoteQueryFunctionReturnType< + TConfig extends + | RemoteQueryObjectConfig + | RemoteQueryObjectFromStringResult +> = TConfig extends RemoteQueryObjectFromStringResult + ? NarrowRemoteFunctionReturnType + : TConfig extends RemoteQueryObjectConfig + ? NarrowRemoteFunctionReturnType + : never*/ + +export type RemoteQueryFunction = { + /** + * Query wrapper to provide specific API's and pre processing around remoteQuery.query + * @param queryConfig + * @param options + */ + ( + queryConfig: RemoteQueryObjectConfig, + options?: RemoteJoinerOptions + ): Promise + + /** + * Query wrapper to provide specific API's and pre processing around remoteQuery.query + * @param queryConfig + * @param options + */ + >( + queryConfig: TConfig, + options?: RemoteJoinerOptions + ): Promise + /** + * Query wrapper to provide specific API's and pre processing around remoteQuery.query + * @param query + * @param options + */ + (query: RemoteJoinerQuery, options?: RemoteJoinerOptions): Promise + /** + * Query wrapper to provide specific GraphQL like API around remoteQuery.query + * @param query + * @param variables + * @param options + */ + gql: ( + query: string, + variables?: Record, + options?: RemoteJoinerOptions + ) => Promise +} diff --git a/packages/core/types/tsconfig.build.json b/packages/core/types/tsconfig.build.json new file mode 100644 index 0000000000..2ce34105bc --- /dev/null +++ b/packages/core/types/tsconfig.build.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "include": ["src"], + "exclude": [ + "dist", + "src/**/__tests__", + "src/**/__mocks__", + "src/**/__fixtures__", + "node_modules" + ], +} diff --git a/packages/core/types/tsconfig.json b/packages/core/types/tsconfig.json index d56e275ba2..16a0c571f8 100644 --- a/packages/core/types/tsconfig.json +++ b/packages/core/types/tsconfig.json @@ -21,8 +21,6 @@ "include": ["src"], "exclude": [ "dist", - "./src/**/__tests__", - "./src/**/__mocks__", "node_modules" ] } diff --git a/packages/core/types/tsconfig.spec.json b/packages/core/types/tsconfig.spec.json new file mode 100644 index 0000000000..48e47e8cbb --- /dev/null +++ b/packages/core/types/tsconfig.spec.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.json", + "include": ["src", "integration-tests"], + "exclude": ["node_modules", "dist"], + "compilerOptions": { + "sourceMap": true + } +} diff --git a/packages/core/utils/src/common/__tests__/deep-merge.ts b/packages/core/utils/src/common/__tests__/deep-merge.ts new file mode 100644 index 0000000000..706315be06 --- /dev/null +++ b/packages/core/utils/src/common/__tests__/deep-merge.ts @@ -0,0 +1,46 @@ +import { deepMerge } from "../deep-merge" + +describe("Deep merge ", function () { + it("should merge 2 objects", () => { + const a = { + x: 1, + y: { + z: 3, + w: 4, + a: { + b: 1, + }, + }, + } + const aCopy = JSON.parse(JSON.stringify(a)) + + const b = { + y: { + w: 5, + q: 6, + a: { + c: 14, + }, + }, + z: 2, + } + const bCopy = JSON.parse(JSON.stringify(b)) + + const merged = deepMerge(a, b) + expect(merged).toEqual({ + x: 1, + y: { + z: 3, + w: 5, + a: { + b: 1, + c: 14, + }, + q: 6, + }, + z: 2, + }) + expect(a).toEqual(aCopy) + expect(b).toEqual(bCopy) + }) +}) diff --git a/packages/core/utils/src/common/__tests__/remote-query-object-from-string.spec.ts b/packages/core/utils/src/common/__tests__/remote-query-object-from-string.spec.ts index f910642c11..bbf558b04b 100644 --- a/packages/core/utils/src/common/__tests__/remote-query-object-from-string.spec.ts +++ b/packages/core/utils/src/common/__tests__/remote-query-object-from-string.spec.ts @@ -45,7 +45,7 @@ describe("remoteQueryObjectFromString", function () { fields, }) - expect(output).toEqual({ + expect(output.__value).toEqual({ product: { __args: { q: "name", @@ -101,9 +101,9 @@ describe("remoteQueryObjectFromString", function () { service: "product", variables: {}, fields, - }) + } as any) - expect(output).toEqual({ + expect(output.__value).toEqual({ product: { __args: {}, fields: [ diff --git a/packages/core/utils/src/common/deep-merge.ts b/packages/core/utils/src/common/deep-merge.ts new file mode 100644 index 0000000000..fb06a5a9de --- /dev/null +++ b/packages/core/utils/src/common/deep-merge.ts @@ -0,0 +1,26 @@ +import { isObject } from "./is-object" + +export function deepMerge(target: any, source: any) { + const recursive = (a, b) => { + if (!isObject(a)) { + return b + } + if (!isObject(b)) { + return a + } + + Object.keys(b).forEach((key) => { + if (isObject(b[key])) { + a[key] ??= {} + a[key] = deepMerge(a[key], b[key]) + } else { + a[key] = b[key] + } + }) + + return a + } + + const copy = { ...target } + return recursive(copy, source) +} diff --git a/packages/core/utils/src/common/generate-linkable-keys-map.ts b/packages/core/utils/src/common/generate-linkable-keys-map.ts deleted file mode 100644 index 38cae12d1b..0000000000 --- a/packages/core/utils/src/common/generate-linkable-keys-map.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { MapToConfig } from "./map-object-to" - -export function generateLinkableKeysMap( - linkableKeys: Record -): MapToConfig { - const entityLinkableKeysMap: MapToConfig = {} - - Object.entries(linkableKeys).forEach(([key, value]) => { - entityLinkableKeysMap[value] ??= [] - entityLinkableKeysMap[value].push({ - mapTo: key, - valueFrom: key.split("_").pop()!, - }) - }) - - return entityLinkableKeysMap -} diff --git a/packages/core/utils/src/common/index.ts b/packages/core/utils/src/common/index.ts index 0533571f47..fefffb4fd1 100644 --- a/packages/core/utils/src/common/index.ts +++ b/packages/core/utils/src/common/index.ts @@ -12,10 +12,12 @@ export * from "./deduplicate" export * from "./deep-copy" export * from "./deep-equal-obj" export * from "./deep-flat-map" +export * from "./deep-merge" +export * from "./define-config" +export * from "./env-editor" export * from "./errors" export * from "./file-system" export * from "./generate-entity-id" -export * from "./generate-linkable-keys-map" export * from "./get-caller-file-path" export * from "./get-config-file" export * from "./get-duplicates" @@ -26,7 +28,6 @@ export * from "./get-set-difference" export * from "./graceful-shutdown-server" export * from "./group-by" export * from "./handle-postgres-database-error" -export * from "./is-truthy" export * from "./is-big-number" export * from "./is-boolean" export * from "./is-date" @@ -35,10 +36,12 @@ export * from "./is-email" export * from "./is-object" export * from "./is-present" export * from "./is-string" +export * from "./is-truthy" export * from "./load-env" export * from "./lower-case-first" export * from "./map-object-to" export * from "./medusa-container" +export * from "./normalize-import-path-with-source" export * from "./object-from-string-path" export * from "./object-to-string-path" export * from "./optional-numeric-serializer" @@ -68,6 +71,3 @@ export * from "./trim-zeros" export * from "./upper-case-first" export * from "./validate-handle" export * from "./wrap-handler" -export * from "./define-config" -export * from "./env-editor" -export * from "./normalize-import-path-with-source" diff --git a/packages/core/utils/src/common/remote-query-object-from-string.ts b/packages/core/utils/src/common/remote-query-object-from-string.ts index 4fa135e26f..6ff51a4bb5 100644 --- a/packages/core/utils/src/common/remote-query-object-from-string.ts +++ b/packages/core/utils/src/common/remote-query-object-from-string.ts @@ -1,3 +1,7 @@ +import { + RemoteQueryObjectConfig, + RemoteQueryObjectFromStringResult, +} from "@medusajs/types" import { isObject } from "./is-object" /** @@ -83,20 +87,18 @@ import { isObject } from "./is-object" * // }, * // } */ -export function remoteQueryObjectFromString( - config: - | { - entryPoint: string - variables?: any - fields: string[] - } - | { - service: string - variables?: any - fields: string[] - } -): object { - const { entryPoint, service, variables, fields } = { +export function remoteQueryObjectFromString< + const TEntry extends string, + const TConfig extends RemoteQueryObjectConfig +>( + config: TConfig | RemoteQueryObjectConfig +): RemoteQueryObjectFromStringResult { + const { + entryPoint, + service, + variables = {}, + fields = [], + } = { ...config, entryPoint: "entryPoint" in config ? config.entryPoint : undefined, service: "service" in config ? config.service : undefined, @@ -114,12 +116,13 @@ export function remoteQueryObjectFromString( const usedVariables = new Set() for (const field of fields) { - if (!field.includes(".")) { + const fieldAsString = field as string + if (!fieldAsString.includes(".")) { remoteJoinerConfig[entryKey]["fields"].push(field) continue } - const fieldSegments = field.split(".") + const fieldSegments = fieldAsString.split(".") const fieldProperty = fieldSegments.pop() let combinedPath = "" @@ -151,5 +154,7 @@ export function remoteQueryObjectFromString( remoteJoinerConfig[entryKey]["__args"] = topLevelArgs ?? {} - return remoteJoinerConfig + return { + __value: remoteJoinerConfig, + } as RemoteQueryObjectFromStringResult } diff --git a/packages/core/utils/src/modules-sdk/joiner-config-builder.ts b/packages/core/utils/src/modules-sdk/joiner-config-builder.ts index 71f4d9ca1a..82e69b7c25 100644 --- a/packages/core/utils/src/modules-sdk/joiner-config-builder.ts +++ b/packages/core/utils/src/modules-sdk/joiner-config-builder.ts @@ -51,7 +51,7 @@ export function defineJoinerConfig( alias?: JoinerServiceConfigAlias[] schema?: string models?: DmlEntity[] | { name: string }[] - linkableKeys?: Record + linkableKeys?: ModuleJoinerConfig["linkableKeys"] primaryKeys?: string[] } = {} ): Omit< @@ -151,18 +151,19 @@ export function defineJoinerConfig( schema = toGraphQLSchema([...modelDefinitions.values()]) } - if (!linkableKeys) { - const linkableKeysFromDml = buildLinkableKeysFromDmlObjects([ - ...modelDefinitions.values(), - ]) - const linkableKeysFromMikroOrm = buildLinkableKeysFromMikroOrmObjects([ - ...mikroOrmObjects.values(), - ]) - linkableKeys = { - ...linkableKeysFromDml, - ...linkableKeysFromMikroOrm, - } + const linkableKeysFromDml = buildLinkableKeysFromDmlObjects([ + ...modelDefinitions.values(), + ]) + const linkableKeysFromMikroOrm = buildLinkableKeysFromMikroOrmObjects([ + ...mikroOrmObjects.values(), + ]) + + const mergedLinkableKeys = { + ...linkableKeysFromDml, + ...linkableKeysFromMikroOrm, + ...linkableKeys, } + linkableKeys = mergedLinkableKeys if (!primaryKeys && modelDefinitions.size) { const linkConfig = buildLinkConfigFromModelObjects( @@ -370,6 +371,7 @@ export function buildLinkConfigFromModelObjects< const linkableKeyName = parsedProperty.dataType.options?.linkable ?? `${camelToSnakeCase(model.name).toLowerCase()}_${property}` + modelLinkConfig[property] = { linkable: linkableKeyName, primaryKey: property, @@ -397,21 +399,24 @@ export function buildLinkConfigFromLinkableKeys< for (const [linkable, modelName] of Object.entries(linkableKeys)) { const kebabCasedModelName = camelToSnakeCase(toCamelCase(modelName)) + const inferredReferenceProperty = linkable.replace( `${kebabCasedModelName}_`, "" ) + const keyName = lowerCaseFirst(modelName) const config = { linkable: linkable, primaryKey: inferredReferenceProperty, serviceName, - field: lowerCaseFirst(modelName), + field: keyName, } - linkConfig[lowerCaseFirst(modelName)] = { - [inferredReferenceProperty]: config, + + linkConfig[keyName] ??= { toJSON: () => config, } + linkConfig[keyName][inferredReferenceProperty] = config } return linkConfig as Record @@ -432,6 +437,5 @@ export function buildModelsNameToLinkableKeysMap( valueFrom: key.split("_").pop()!, }) }) - return entityLinkableKeysMap } diff --git a/packages/core/utils/src/modules-sdk/module.ts b/packages/core/utils/src/modules-sdk/module.ts index 16ca901a5a..7e995957da 100644 --- a/packages/core/utils/src/modules-sdk/module.ts +++ b/packages/core/utils/src/modules-sdk/module.ts @@ -35,12 +35,12 @@ export function Module< } { const modelObjects = service[MedusaServiceModelObjectsSymbol] ?? {} - const defaultJoinerConfig = defineJoinerConfig(serviceName, { - models: Object.keys(modelObjects).length - ? Object.values(modelObjects) - : undefined, - }) - service.prototype.__joinerConfig ??= () => defaultJoinerConfig + service.prototype.__joinerConfig ??= () => + defineJoinerConfig(serviceName, { + models: Object.keys(modelObjects).length + ? Object.values(modelObjects) + : undefined, + }) let linkable = {} as Linkable diff --git a/packages/framework/framework/src/index.ts b/packages/framework/framework/src/index.ts index 5cf77257a2..e3a8d090fe 100644 --- a/packages/framework/framework/src/index.ts +++ b/packages/framework/framework/src/index.ts @@ -11,3 +11,5 @@ export * from "./subscribers" export * from "./workflows" export const MEDUSA_CLI_PATH = require.resolve("@medusajs/medusa-cli") + +export { GraphQLSchema, gqlSchemaToTypes } from "@medusajs/modules-sdk" diff --git a/packages/medusa/src/api/admin/claims/[id]/inbound/items/[action_id]/route.ts b/packages/medusa/src/api/admin/claims/[id]/inbound/items/[action_id]/route.ts index 7a442e3b83..43bf8ba1f1 100644 --- a/packages/medusa/src/api/admin/claims/[id]/inbound/items/[action_id]/route.ts +++ b/packages/medusa/src/api/admin/claims/[id]/inbound/items/[action_id]/route.ts @@ -31,7 +31,6 @@ export const POST = async ( }, fields: ["return_id"], }), - undefined, { throwIfKeyNotFound: true, } diff --git a/packages/medusa/src/api/admin/claims/[id]/inbound/items/route.ts b/packages/medusa/src/api/admin/claims/[id]/inbound/items/route.ts index 4cf2ad5cd3..ff0833faa0 100644 --- a/packages/medusa/src/api/admin/claims/[id]/inbound/items/route.ts +++ b/packages/medusa/src/api/admin/claims/[id]/inbound/items/route.ts @@ -28,7 +28,6 @@ export const POST = async ( }, fields: ["return_id"], }), - undefined, { throwIfKeyNotFound: true, } diff --git a/packages/medusa/src/api/admin/claims/[id]/inbound/shipping-method/[action_id]/route.ts b/packages/medusa/src/api/admin/claims/[id]/inbound/shipping-method/[action_id]/route.ts index ff9058bd90..5b84a8a438 100644 --- a/packages/medusa/src/api/admin/claims/[id]/inbound/shipping-method/[action_id]/route.ts +++ b/packages/medusa/src/api/admin/claims/[id]/inbound/shipping-method/[action_id]/route.ts @@ -30,7 +30,6 @@ export const POST = async ( }, fields: ["return_id"], }), - undefined, { throwIfKeyNotFound: true, } @@ -79,7 +78,6 @@ export const DELETE = async ( }, fields: ["id", "return_id"], }), - undefined, { throwIfKeyNotFound: true, } diff --git a/packages/medusa/src/api/admin/claims/[id]/inbound/shipping-method/route.ts b/packages/medusa/src/api/admin/claims/[id]/inbound/shipping-method/route.ts index fd6e56eb8f..83abb4dc0d 100644 --- a/packages/medusa/src/api/admin/claims/[id]/inbound/shipping-method/route.ts +++ b/packages/medusa/src/api/admin/claims/[id]/inbound/shipping-method/route.ts @@ -28,7 +28,6 @@ export const POST = async ( }, fields: ["return_id"], }), - undefined, { throwIfKeyNotFound: true, } diff --git a/packages/medusa/src/api/admin/claims/[id]/request/route.ts b/packages/medusa/src/api/admin/claims/[id]/request/route.ts index bfa07c7b46..df7640c9b0 100644 --- a/packages/medusa/src/api/admin/claims/[id]/request/route.ts +++ b/packages/medusa/src/api/admin/claims/[id]/request/route.ts @@ -39,7 +39,7 @@ export const POST = async ( fields: req.remoteQueryConfig.fields, }) - const [orderClaim] = await remoteQuery(queryObject, undefined, { + const [orderClaim] = await remoteQuery(queryObject, { throwIfKeyNotFound: true, }) diff --git a/packages/medusa/src/api/admin/exchanges/[id]/inbound/items/[action_id]/route.ts b/packages/medusa/src/api/admin/exchanges/[id]/inbound/items/[action_id]/route.ts index 9cda724854..a8b17c91ce 100644 --- a/packages/medusa/src/api/admin/exchanges/[id]/inbound/items/[action_id]/route.ts +++ b/packages/medusa/src/api/admin/exchanges/[id]/inbound/items/[action_id]/route.ts @@ -31,7 +31,6 @@ export const POST = async ( }, fields: ["return_id"], }), - undefined, { throwIfKeyNotFound: true, } diff --git a/packages/medusa/src/api/admin/exchanges/[id]/inbound/items/route.ts b/packages/medusa/src/api/admin/exchanges/[id]/inbound/items/route.ts index a72fd089d3..11600c659e 100644 --- a/packages/medusa/src/api/admin/exchanges/[id]/inbound/items/route.ts +++ b/packages/medusa/src/api/admin/exchanges/[id]/inbound/items/route.ts @@ -28,7 +28,6 @@ export const POST = async ( }, fields: ["return_id"], }), - undefined, { throwIfKeyNotFound: true, } diff --git a/packages/medusa/src/api/admin/exchanges/[id]/inbound/shipping-method/[action_id]/route.ts b/packages/medusa/src/api/admin/exchanges/[id]/inbound/shipping-method/[action_id]/route.ts index 895e4b38f1..f56abeed24 100644 --- a/packages/medusa/src/api/admin/exchanges/[id]/inbound/shipping-method/[action_id]/route.ts +++ b/packages/medusa/src/api/admin/exchanges/[id]/inbound/shipping-method/[action_id]/route.ts @@ -30,7 +30,6 @@ export const POST = async ( }, fields: ["return_id"], }), - undefined, { throwIfKeyNotFound: true, } @@ -79,7 +78,6 @@ export const DELETE = async ( }, fields: ["return_id"], }), - undefined, { throwIfKeyNotFound: true, } diff --git a/packages/medusa/src/api/admin/exchanges/[id]/inbound/shipping-method/route.ts b/packages/medusa/src/api/admin/exchanges/[id]/inbound/shipping-method/route.ts index e0617f7e21..8d0fb700f2 100644 --- a/packages/medusa/src/api/admin/exchanges/[id]/inbound/shipping-method/route.ts +++ b/packages/medusa/src/api/admin/exchanges/[id]/inbound/shipping-method/route.ts @@ -28,7 +28,6 @@ export const POST = async ( }, fields: ["return_id"], }), - undefined, { throwIfKeyNotFound: true, } diff --git a/packages/medusa/src/api/admin/exchanges/[id]/request/route.ts b/packages/medusa/src/api/admin/exchanges/[id]/request/route.ts index 2120986bcc..5367712c20 100644 --- a/packages/medusa/src/api/admin/exchanges/[id]/request/route.ts +++ b/packages/medusa/src/api/admin/exchanges/[id]/request/route.ts @@ -39,7 +39,7 @@ export const POST = async ( fields: req.remoteQueryConfig.fields, }) - const [orderExchange] = await remoteQuery(queryObject, undefined, { + const [orderExchange] = await remoteQuery(queryObject, { throwIfKeyNotFound: true, }) diff --git a/packages/medusa/src/api/admin/products/helpers.ts b/packages/medusa/src/api/admin/products/helpers.ts index 3fc5f0cc35..19c0110fc7 100644 --- a/packages/medusa/src/api/admin/products/helpers.ts +++ b/packages/medusa/src/api/admin/products/helpers.ts @@ -140,7 +140,6 @@ export const refetchBatchProducts = async ( fields: remapKeysForProduct(fields ?? []), }) - // @ts-expect-error "Remote query can return null" created = remoteQuery(createdQuery) } @@ -153,7 +152,6 @@ export const refetchBatchProducts = async ( fields: remapKeysForProduct(fields ?? []), }) - // @ts-expect-error "Remote query can return null" updated = remoteQuery(updatedQuery) } @@ -187,7 +185,6 @@ export const refetchBatchVariants = async ( fields: remapKeysForVariant(fields ?? []), }) - // @ts-expect-error "Remote query can return null" created = remoteQuery(createdQuery) } @@ -200,7 +197,6 @@ export const refetchBatchVariants = async ( fields: remapKeysForVariant(fields ?? []), }) - // @ts-expect-error "Remote query can return null" updated = remoteQuery(updatedQuery) } diff --git a/packages/medusa/src/api/admin/promotions/helpers.ts b/packages/medusa/src/api/admin/promotions/helpers.ts index 96d1909678..df24ee6a25 100644 --- a/packages/medusa/src/api/admin/promotions/helpers.ts +++ b/packages/medusa/src/api/admin/promotions/helpers.ts @@ -42,7 +42,6 @@ export const refetchBatchRules = async ( fields: fields, }) - // @ts-expect-error "Remote query can return null" created = remoteQuery(createdQuery) } @@ -55,7 +54,6 @@ export const refetchBatchRules = async ( fields: fields, }) - // @ts-expect-error "Remote query can return null" updated = remoteQuery(updatedQuery) } diff --git a/packages/medusa/src/api/admin/returns/[id]/route.ts b/packages/medusa/src/api/admin/returns/[id]/route.ts index c948e55de1..69ffb2a1c2 100644 --- a/packages/medusa/src/api/admin/returns/[id]/route.ts +++ b/packages/medusa/src/api/admin/returns/[id]/route.ts @@ -29,7 +29,7 @@ export const GET = async ( fields: req.remoteQueryConfig.fields, }) - const [orderReturn] = await remoteQuery(queryObject, undefined, { + const [orderReturn] = await remoteQuery(queryObject, { throwIfKeyNotFound: true, }) diff --git a/packages/medusa/src/api/admin/shipping-options/helpers.ts b/packages/medusa/src/api/admin/shipping-options/helpers.ts index 3c32e772aa..a8bfe51641 100644 --- a/packages/medusa/src/api/admin/shipping-options/helpers.ts +++ b/packages/medusa/src/api/admin/shipping-options/helpers.ts @@ -45,7 +45,6 @@ export const refetchBatchRules = async ( fields: fields, }) - // @ts-expect-error "Remote query can return null" created = remoteQuery(createdQuery) } @@ -58,7 +57,6 @@ export const refetchBatchRules = async ( fields: fields, }) - // @ts-expect-error "Remote query can return null" updated = remoteQuery(updatedQuery) } diff --git a/packages/medusa/src/api/utils/middlewares/products/variant-inventory-quantity.ts b/packages/medusa/src/api/utils/middlewares/products/variant-inventory-quantity.ts index ee39c5b171..4099560501 100644 --- a/packages/medusa/src/api/utils/middlewares/products/variant-inventory-quantity.ts +++ b/packages/medusa/src/api/utils/middlewares/products/variant-inventory-quantity.ts @@ -29,7 +29,7 @@ export async function getVariantInventoryItems({ "inventory.*", "inventory.location_levels.*", ], - }) + } as any) const links = await remoteQuery(linkQuery) diff --git a/packages/medusa/src/api/utils/refetch-entity.ts b/packages/medusa/src/api/utils/refetch-entity.ts index a071d2d070..b3b8ee03d6 100644 --- a/packages/medusa/src/api/utils/refetch-entity.ts +++ b/packages/medusa/src/api/utils/refetch-entity.ts @@ -4,13 +4,14 @@ import { isString, remoteQueryObjectFromString, } from "@medusajs/utils" +import { MedusaRequest } from "../../types/routing" export const refetchEntities = async ( entryPoint: string, idOrFilter: string | object, scope: MedusaContainer, fields: string[], - pagination: object = {} + pagination: MedusaRequest["remoteQueryConfig"]["pagination"] = {} ) => { const remoteQuery = scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY) const filters = isString(idOrFilter) ? { id: idOrFilter } : idOrFilter diff --git a/packages/medusa/src/commands/develop.ts b/packages/medusa/src/commands/develop.ts index 17bfaa3ba8..3647141bdd 100644 --- a/packages/medusa/src/commands/develop.ts +++ b/packages/medusa/src/commands/develop.ts @@ -13,7 +13,7 @@ const defaultConfig = { borderStyle: `double`, } as boxen.Options -export default async function ({ port, directory }) { +export default async function ({ types, directory }) { const args = process.argv const argv = @@ -25,6 +25,10 @@ export default async function ({ port, directory }) { args.shift() args.shift() + if (types) { + args.push("--types") + } + /** * Re-constructing the path to Medusa CLI to execute the * start command. @@ -95,6 +99,7 @@ export default async function ({ port, directory }) { "static", "private", "src/admin/**/*", + ".medusa/**/*", ], }) diff --git a/packages/medusa/src/commands/start.ts b/packages/medusa/src/commands/start.ts index 858a339b96..562d88bec6 100644 --- a/packages/medusa/src/commands/start.ts +++ b/packages/medusa/src/commands/start.ts @@ -2,25 +2,35 @@ import express from "express" import { track } from "medusa-telemetry" import { scheduleJob } from "node-schedule" -import { logger } from "@medusajs/framework" +import { gqlSchemaToTypes, logger } from "@medusajs/framework" import { GracefulShutdownServer } from "@medusajs/utils" import loaders from "../loaders" +import path from "path" const EVERY_SIXTH_HOUR = "0 */6 * * *" const CRON_SCHEDULE = EVERY_SIXTH_HOUR -export default async function ({ port, directory }) { +export default async function ({ port, directory, types }) { async function start() { track("CLI_START") const app = express() try { - const { shutdown } = await loaders({ + const { shutdown, gqlSchema } = await loaders({ directory, expressApp: app, }) + if (gqlSchema && types) { + const outputDirGeneratedTypes = path.join(directory, ".medusa") + await gqlSchemaToTypes({ + outputDir: outputDirGeneratedTypes, + schema: gqlSchema, + }) + logger.info("Geneated modules types") + } + const serverActivity = logger.activity(`Creating server`) const server = GracefulShutdownServer.create( app.listen(port).on("listening", () => { diff --git a/packages/medusa/src/loaders/index.ts b/packages/medusa/src/loaders/index.ts index 00bd380191..cf3c9b01b4 100644 --- a/packages/medusa/src/loaders/index.ts +++ b/packages/medusa/src/loaders/index.ts @@ -13,6 +13,7 @@ import { container, expressLoader, featureFlagsLoader, + GraphQLSchema, JobLoader, LinkLoader, logger, @@ -133,6 +134,7 @@ export default async ({ container: MedusaContainer app: Express shutdown: () => Promise + gqlSchema?: GraphQLSchema }> => { const container = await initializeContainer(rootDirectory) const configModule = container.resolve( @@ -149,6 +151,7 @@ export default async ({ onApplicationStart, onApplicationShutdown, onApplicationPrepareShutdown, + gqlSchema, } = await new MedusaAppLoader().load() const workflowsSourcePaths = plugins.map((p) => join(p.resolve, "workflows")) @@ -184,5 +187,6 @@ export default async ({ container, app: expressApp, shutdown, + gqlSchema, } } diff --git a/packages/modules/api-key/integration-tests/__tests__/api-key-module-service.spec.ts b/packages/modules/api-key/integration-tests/__tests__/api-key-module-service.spec.ts index b5d72a08bd..902cd8d9b1 100644 --- a/packages/modules/api-key/integration-tests/__tests__/api-key-module-service.spec.ts +++ b/packages/modules/api-key/integration-tests/__tests__/api-key-module-service.spec.ts @@ -1,12 +1,12 @@ import { IApiKeyModuleService } from "@medusajs/types" import { ApiKeyType, Module, Modules } from "@medusajs/utils" +import { ApiKeyModuleService } from "@services" import crypto from "crypto" import { moduleIntegrationTestRunner } from "medusa-test-utils" import { createPublishableKeyFixture, createSecretKeyFixture, } from "../__fixtures__" -import { ApiKeyModuleService } from "@services" jest.setTimeout(100000) @@ -47,7 +47,9 @@ moduleIntegrationTestRunner({ expect(Object.keys(linkable)).toEqual(["apiKey"]) - linkable.apiKey.toJSON = undefined + Object.keys(linkable).forEach((key) => { + delete linkable[key].toJSON + }) expect(linkable.apiKey).toEqual({ id: { @@ -56,6 +58,12 @@ moduleIntegrationTestRunner({ serviceName: "apiKey", field: "apiKey", }, + publishable_key_id: { + field: "apiKey", + linkable: "publishable_key_id", + primaryKey: "publishable_key_id", + serviceName: "apiKey", + }, }) }) diff --git a/packages/modules/api-key/src/joiner-config.ts b/packages/modules/api-key/src/joiner-config.ts new file mode 100644 index 0000000000..299cd0a4b2 --- /dev/null +++ b/packages/modules/api-key/src/joiner-config.ts @@ -0,0 +1,8 @@ +import { defineJoinerConfig, Modules } from "@medusajs/utils" + +export const joinerConfig = defineJoinerConfig(Modules.API_KEY, { + linkableKeys: { + // Merged with the autogenerated ones to maintain backward compatibility + publishable_key_id: "ApiKey", + }, +}) diff --git a/packages/modules/api-key/src/services/api-key-module-service.ts b/packages/modules/api-key/src/services/api-key-module-service.ts index 452cd9f130..3ae028f517 100644 --- a/packages/modules/api-key/src/services/api-key-module-service.ts +++ b/packages/modules/api-key/src/services/api-key-module-service.ts @@ -8,6 +8,7 @@ import { FindConfig, IApiKeyModuleService, InternalModuleDeclaration, + ModuleJoinerConfig, ModulesSdkTypes, } from "@medusajs/types" import { ApiKey } from "@models" @@ -28,6 +29,7 @@ import { MedusaService, promiseAll, } from "@medusajs/utils" +import { joinerConfig } from "../joiner-config" const scrypt = util.promisify(crypto.scrypt) @@ -55,6 +57,10 @@ export class ApiKeyModuleService this.apiKeyService_ = apiKeyService } + __joinerConfig(): ModuleJoinerConfig { + return joinerConfig + } + //@ts-expect-error createApiKeys( data: ApiKeyTypes.CreateApiKeyDTO[], diff --git a/packages/modules/fulfillment/integration-tests/__tests__/fulfillment-module-service/index.spec.ts b/packages/modules/fulfillment/integration-tests/__tests__/fulfillment-module-service/index.spec.ts index e5e9d60f1c..69b8fb7d3f 100644 --- a/packages/modules/fulfillment/integration-tests/__tests__/fulfillment-module-service/index.spec.ts +++ b/packages/modules/fulfillment/integration-tests/__tests__/fulfillment-module-service/index.spec.ts @@ -3,9 +3,9 @@ import { FulfillmentSetDTO, IFulfillmentModuleService } from "@medusajs/types" import { Module, Modules } from "@medusajs/utils" import { FulfillmentModuleService, FulfillmentProviderService } from "@services" import { + SuiteOptions, initModules, moduleIntegrationTestRunner, - SuiteOptions, } from "medusa-test-utils" import { resolve } from "path" import { createFullDataStructure } from "../../__fixtures__" @@ -109,10 +109,18 @@ moduleIntegrationTestRunner({ }).linkable expect(Object.keys(linkable)).toEqual([ - "fulfillment", + "fulfillmentAddress", + "fulfillmentItem", + "fulfillmentLabel", + "fulfillmentProvider", "fulfillmentSet", - "shippingOption", + "fulfillment", + "geoZone", + "serviceZone", "shippingOptionRule", + "shippingOptionType", + "shippingOption", + "shippingProfile", ]) Object.keys(linkable).forEach((key) => { @@ -120,12 +128,36 @@ moduleIntegrationTestRunner({ }) expect(linkable).toEqual({ - fulfillment: { + fulfillmentAddress: { id: { - linkable: "fulfillment_id", + linkable: "fulfillment_address_id", primaryKey: "id", serviceName: "fulfillment", - field: "fulfillment", + field: "fulfillmentAddress", + }, + }, + fulfillmentItem: { + id: { + linkable: "fulfillment_item_id", + primaryKey: "id", + serviceName: "fulfillment", + field: "fulfillmentItem", + }, + }, + fulfillmentLabel: { + id: { + linkable: "fulfillment_label_id", + primaryKey: "id", + serviceName: "fulfillment", + field: "fulfillmentLabel", + }, + }, + fulfillmentProvider: { + id: { + linkable: "fulfillment_provider_id", + primaryKey: "id", + serviceName: "fulfillment", + field: "fulfillmentProvider", }, }, fulfillmentSet: { @@ -136,12 +168,28 @@ moduleIntegrationTestRunner({ field: "fulfillmentSet", }, }, - shippingOption: { + fulfillment: { id: { - linkable: "shipping_option_id", + linkable: "fulfillment_id", primaryKey: "id", serviceName: "fulfillment", - field: "shippingOption", + field: "fulfillment", + }, + }, + geoZone: { + id: { + linkable: "geo_zone_id", + primaryKey: "id", + serviceName: "fulfillment", + field: "geoZone", + }, + }, + serviceZone: { + id: { + linkable: "service_zone_id", + primaryKey: "id", + serviceName: "fulfillment", + field: "serviceZone", }, }, shippingOptionRule: { @@ -152,6 +200,30 @@ moduleIntegrationTestRunner({ field: "shippingOptionRule", }, }, + shippingOptionType: { + id: { + linkable: "shipping_option_type_id", + primaryKey: "id", + serviceName: "fulfillment", + field: "shippingOptionType", + }, + }, + shippingOption: { + id: { + linkable: "shipping_option_id", + primaryKey: "id", + serviceName: "fulfillment", + field: "shippingOption", + }, + }, + shippingProfile: { + id: { + linkable: "shipping_profile_id", + primaryKey: "id", + serviceName: "fulfillment", + field: "shippingProfile", + }, + }, }) }) diff --git a/packages/modules/fulfillment/src/joiner-config.ts b/packages/modules/fulfillment/src/joiner-config.ts index a92b6a2263..e767b13dfc 100644 --- a/packages/modules/fulfillment/src/joiner-config.ts +++ b/packages/modules/fulfillment/src/joiner-config.ts @@ -1,16 +1,20 @@ import { defineJoinerConfig, Modules } from "@medusajs/utils" import { Fulfillment, + FulfillmentProvider, FulfillmentSet, ShippingOption, ShippingOptionRule, } from "@models" +import { default as schema } from "./schema" export const joinerConfig = defineJoinerConfig(Modules.FULFILLMENT, { + schema, linkableKeys: { fulfillment_id: Fulfillment.name, fulfillment_set_id: FulfillmentSet.name, shipping_option_id: ShippingOption.name, shipping_option_rule_id: ShippingOptionRule.name, + fulfillment_provider_id: FulfillmentProvider.name, }, }) diff --git a/packages/modules/fulfillment/src/schema/index.ts b/packages/modules/fulfillment/src/schema/index.ts new file mode 100644 index 0000000000..cf73a406a6 --- /dev/null +++ b/packages/modules/fulfillment/src/schema/index.ts @@ -0,0 +1,167 @@ +export default ` +enum GeoZoneType { + country + province + city + zip +} + +enum ShippingOptionPriceType { + calculated + flat +} + +type FulfillmentItem { + id: ID! + title: String! + quantity: Int! + sku: String! + barcode: String! + line_item_id: String + inventory_item_id: String + fulfillment_id: String! + fulfillment: Fulfillment! + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime +} + +type FulfillmentLabel { + id: ID! + tracking_number: String! + tracking_url: String! + label_url: String! + fulfillment_id: String! + fulfillment: Fulfillment! + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime +} + +type FulfillmentProvider { + id: ID! + name: String! + metadata: JSON + shipping_options: [ShippingOption!]! + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime +} + +type FulfillmentSet { + id: ID! + name: String! + type: String! + metadata: JSON + service_zones: [ServiceZone!]! + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime +} + +type Fulfillment { + id: ID! + location_id: String! + packed_at: DateTime + shipped_at: DateTime + delivered_at: DateTime + canceled_at: DateTime + marked_shipped_by: String + created_by: String + data: JSON + provider_id: String! + shipping_option_id: String + metadata: JSON + shipping_option: ShippingOption + provider: FulfillmentProvider! + delivery_address: FulfillmentAddress! + items: [FulfillmentItem!]! + labels: [FulfillmentLabel!]! + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime +} + +type GeoZone { + id: ID! + type: GeoZoneType! + country_code: String! + province_code: String + city: String + postal_expression: JSON + metadata: JSON + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime +} + +type ServiceZone { + id: ID! + name: String! + metadata: JSON + fulfillment_set: FulfillmentSet! + fulfillment_set_id: String! + geo_zones: [GeoZone!]! + shipping_options: [ShippingOption!]! + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime +} + +type ShippingOptionRule { + id: ID! + attribute: String! + operator: String! + value: JSON + shipping_option_id: String! + shipping_option: ShippingOption! + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime +} + +type ShippingOptionType { + id: ID! + label: String! + description: String! + code: String! + shipping_option_id: String! + shipping_option: ShippingOption! + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime +} + +type ShippingOption { + id: ID! + name: String! + price_type: ShippingOptionPriceType! + service_zone_id: String! + shipping_profile_id: String! + provider_id: String! + shipping_option_type_id: String + data: JSON + metadata: JSON + service_zone: ServiceZone! + shipping_profile: ShippingProfile! + fulfillment_provider: FulfillmentProvider! + type: ShippingOptionType! + rules: [ShippingOptionRule!]! + fulfillments: [Fulfillment!]! + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime +} + +type ShippingProfile { + id: ID! + name: String! + type: String! + metadata: JSON + shipping_options: [ShippingOption!]! + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime +} + +` diff --git a/packages/modules/link-modules/src/utils/generate-schema.ts b/packages/modules/link-modules/src/utils/generate-schema.ts index 66bf9063fe..05363d7d61 100644 --- a/packages/modules/link-modules/src/utils/generate-schema.ts +++ b/packages/modules/link-modules/src/utils/generate-schema.ts @@ -1,6 +1,11 @@ import { MedusaModule } from "@medusajs/modules-sdk" import { ModuleJoinerConfig, ModuleJoinerRelationship } from "@medusajs/types" -import { camelToSnakeCase, lowerCaseFirst, toPascalCase } from "@medusajs/utils" +import { + camelToSnakeCase, + isString, + lowerCaseFirst, + toPascalCase, +} from "@medusajs/utils" import { composeTableName } from "./compose-link-name" export function generateGraphQLSchema( @@ -38,15 +43,18 @@ export function generateGraphQLSchema( ) } - const extJoinerConfig = MedusaModule.getJoinerConfig( + /* const extJoinerConfig = MedusaModule.getJoinerConfig( extend.relationship.serviceName - ) - let extendedEntityName = - extJoinerConfig?.linkableKeys?.[extend.relationship.foreignKey]! + )*/ - if (!isReadOnlyLink && !extendedEntityName && (!primary || !foreign)) { + const extendedEntityName = + extendedModule[extend.serviceName].__joinerConfig.linkableKeys[ + extend.relationship.primaryKey + ] + + if (!isReadOnlyLink && (!primary || !foreign || !extendedEntityName)) { logger.warn( - `Link modules schema: No linkable key found for ${extend.relationship.foreignKey} on module ${extend.relationship.serviceName}.` + `Link modules schema: No linkable key found for ${extend.relationship.primaryKey} on module ${extend.serviceName}.` ) continue @@ -57,15 +65,82 @@ export function generateGraphQLSchema( ) let type = extend.relationship.isList ? `[${entityName}]` : entityName - if (extJoinerConfig?.isReadOnlyLink) { - type = extend.relationship.isList + if (joinerConfig?.isReadOnlyLink) { + // TODO: In readonly, the relation ship of the extend should be applied on all entities in the module that have the relationshiop foregin key attribute + /*type = extend.relationship.isList ? `[${extendedEntityName}]` - : extendedEntityName + : extendedEntityName*/ + continue } + /** + * Find the field aliases shortcut to extend the entity with it + */ + const fieldsAliasesField = Object.entries(extend.fieldAlias || {}) + .map(([field, config]) => { + const path = isString(config) ? config : config.path + const isList = isString(config) + ? extend.relationship.isList + : config.isList ?? extend.relationship.isList + + const pathSegments = path.split(",").reverse() + + /*const relationshipMarkerIndex = pathSegments.findIndex((segment) => { + return !!joinerConfig.relationships!.find( + (relation) => relation.alias === targetEntityAlias + ) + }) + + if (relationshipMarkerIndex === -1) { + return + }*/ + + /*const relationshipPropertyPath = pathSegments + .slice(0, relationshipMarkerIndex + 1) + .reverse()*/ + + const targetEntityAlias = path.split(".").pop() + + const targetEntityRelation = joinerConfig.relationships?.find( + (relation) => relation.alias === targetEntityAlias + ) + + if (!targetEntityRelation) { + return + } + + const targetEntityName = MedusaModule.getJoinerConfig( + targetEntityRelation.serviceName + ).linkableKeys?.[targetEntityRelation.foreignKey] + + if (!targetEntityName) { + logger.warn( + `Link modules schema: No linkable key found for ${targetEntityRelation.foreignKey} on module ${targetEntityRelation.serviceName}.` + ) + + return + } + + // TODO: Re visit field aliases that access properties from a type + /*const targetEntityType = `${targetEntityName}${ + relationshipPropertyPath.length + ? relationshipPropertyPath.reduce((acc, value) => { + return `${acc}[${value}]` + }, targetEntityName) + : "" + }`*/ + + return `${field}: ${ + isList ? `[${targetEntityName}]` : targetEntityName + }` + }) + .filter(Boolean) + typeDef += ` - extend type ${extend.serviceName} { + extend type ${extendedEntityName} { ${fieldName}: ${type} + + ${fieldsAliasesField.join("\n")} } ` } @@ -92,14 +167,26 @@ export function generateGraphQLSchema( } } - // Link table relationships - const primaryField = `${camelToSnakeCase(primary.alias)}: ${toPascalCase( - composeTableName(primary.serviceName) - )}` + // TODO: temporary, every module might always expose their schema + const doesPrimaryExportSchema = !!MedusaModule.getJoinerConfig( + primary.serviceName + )?.schema + const doesForeignExportSchema = !!MedusaModule.getJoinerConfig( + foreign.serviceName + )?.schema - const foreignField = `${camelToSnakeCase(foreign.alias)}: ${toPascalCase( - composeTableName(foreign.serviceName) - )}` + // Link table relationships + const primaryField = doesPrimaryExportSchema + ? `${camelToSnakeCase(primary.alias)}: ${toPascalCase( + composeTableName(primary.serviceName) + )}` + : "" + + const foreignField = doesForeignExportSchema + ? `${camelToSnakeCase(foreign.alias)}: ${toPascalCase( + composeTableName(foreign.serviceName) + )}` + : "" typeDef += ` type ${entityName} { diff --git a/packages/modules/order/integration-tests/__tests__/index.spec.ts b/packages/modules/order/integration-tests/__tests__/index.spec.ts index 0c1a244d3c..90b0d94e60 100644 --- a/packages/modules/order/integration-tests/__tests__/index.spec.ts +++ b/packages/modules/order/integration-tests/__tests__/index.spec.ts @@ -15,26 +15,14 @@ moduleIntegrationTestRunner({ expect(Object.keys(linkable)).toEqual([ "order", "orderAddress", - "orderLineItem", - "orderLineItemAdjustment", - "orderLineItemTaxLine", - "orderShippingMethod", - "orderShippingMethodAdjustment", - "orderShippingMethodTaxLine", - "orderTransaction", "orderChange", - "orderChangeAction", - "orderItem", - "orderSummary", - "orderShipping", - "returnReason", - "return", - "returnItem", "orderClaim", - "orderClaimItem", - "orderClaimItemImage", "orderExchange", - "orderExchangeItem", + "orderLineItem", + "orderShippingMethod", + "orderTransaction", + "return", + "returnReason", ]) Object.keys(linkable).forEach((key) => { @@ -58,6 +46,42 @@ moduleIntegrationTestRunner({ field: "orderAddress", }, }, + orderChange: { + id: { + linkable: "order_change_id", + primaryKey: "id", + serviceName: "order", + field: "orderChange", + }, + }, + orderClaim: { + id: { + linkable: "order_claim_id", + primaryKey: "id", + serviceName: "order", + field: "orderClaim", + }, + claim_id: { + linkable: "claim_id", + primaryKey: "claim_id", + serviceName: "order", + field: "orderClaim", + }, + }, + orderExchange: { + id: { + linkable: "order_exchange_id", + primaryKey: "id", + serviceName: "order", + field: "orderExchange", + }, + exchange_id: { + linkable: "exchange_id", + primaryKey: "exchange_id", + serviceName: "order", + field: "orderExchange", + }, + }, orderLineItem: { id: { linkable: "order_line_item_id", @@ -66,22 +90,6 @@ moduleIntegrationTestRunner({ field: "orderLineItem", }, }, - orderLineItemAdjustment: { - id: { - linkable: "order_line_item_adjustment_id", - primaryKey: "id", - serviceName: "order", - field: "orderLineItemAdjustment", - }, - }, - orderLineItemTaxLine: { - id: { - linkable: "order_line_item_tax_line_id", - primaryKey: "id", - serviceName: "order", - field: "orderLineItemTaxLine", - }, - }, orderShippingMethod: { id: { linkable: "order_shipping_method_id", @@ -90,22 +98,6 @@ moduleIntegrationTestRunner({ field: "orderShippingMethod", }, }, - orderShippingMethodAdjustment: { - id: { - linkable: "order_shipping_method_adjustment_id", - primaryKey: "id", - serviceName: "order", - field: "orderShippingMethodAdjustment", - }, - }, - orderShippingMethodTaxLine: { - id: { - linkable: "order_shipping_method_tax_line_id", - primaryKey: "id", - serviceName: "order", - field: "orderShippingMethodTaxLine", - }, - }, orderTransaction: { id: { linkable: "order_transaction_id", @@ -114,54 +106,6 @@ moduleIntegrationTestRunner({ field: "orderTransaction", }, }, - orderChange: { - id: { - linkable: "order_change_id", - primaryKey: "id", - serviceName: "order", - field: "orderChange", - }, - }, - orderChangeAction: { - id: { - linkable: "order_change_action_id", - primaryKey: "id", - serviceName: "order", - field: "orderChangeAction", - }, - }, - orderItem: { - id: { - linkable: "order_item_id", - primaryKey: "id", - serviceName: "order", - field: "orderItem", - }, - }, - orderSummary: { - id: { - linkable: "order_summary_id", - primaryKey: "id", - serviceName: "order", - field: "orderSummary", - }, - }, - orderShipping: { - id: { - linkable: "order_shipping_id", - primaryKey: "id", - serviceName: "order", - field: "orderShipping", - }, - }, - returnReason: { - id: { - linkable: "return_reason_id", - primaryKey: "id", - serviceName: "order", - field: "returnReason", - }, - }, return: { id: { linkable: "return_id", @@ -170,52 +114,12 @@ moduleIntegrationTestRunner({ field: "return", }, }, - returnItem: { + returnReason: { id: { - linkable: "return_item_id", + linkable: "return_reason_id", primaryKey: "id", serviceName: "order", - field: "returnItem", - }, - }, - orderClaim: { - id: { - linkable: "order_claim_id", - primaryKey: "id", - serviceName: "order", - field: "orderClaim", - }, - }, - orderClaimItem: { - id: { - linkable: "order_claim_item_id", - primaryKey: "id", - serviceName: "order", - field: "orderClaimItem", - }, - }, - orderClaimItemImage: { - id: { - linkable: "order_claim_item_image_id", - primaryKey: "id", - serviceName: "order", - field: "orderClaimItemImage", - }, - }, - orderExchange: { - id: { - linkable: "order_exchange_id", - primaryKey: "id", - serviceName: "order", - field: "orderExchange", - }, - }, - orderExchangeItem: { - id: { - linkable: "order_exchange_item_id", - primaryKey: "id", - serviceName: "order", - field: "orderExchangeItem", + field: "returnReason", }, }, }) diff --git a/packages/modules/order/src/index.ts b/packages/modules/order/src/index.ts index b951a24736..13dfbbb48d 100644 --- a/packages/modules/order/src/index.ts +++ b/packages/modules/order/src/index.ts @@ -1,5 +1,5 @@ -import { OrderModuleService } from "@services" import { Module, Modules } from "@medusajs/utils" +import { OrderModuleService } from "@services" export default Module(Modules.ORDER, { service: OrderModuleService, diff --git a/packages/modules/order/src/joiner-config.ts b/packages/modules/order/src/joiner-config.ts new file mode 100644 index 0000000000..ee502c7d97 --- /dev/null +++ b/packages/modules/order/src/joiner-config.ts @@ -0,0 +1,34 @@ +import { defineJoinerConfig, Modules } from "@medusajs/utils" +import { + Order, + OrderAddress, + OrderChange, + OrderClaim, + OrderExchange, + OrderLineItem, + OrderShippingMethod, + OrderTransaction, + Return, + ReturnReason, +} from "@models" +import { default as schema } from "./schema" + +export const joinerConfig = defineJoinerConfig(Modules.ORDER, { + schema, + linkableKeys: { + claim_id: "OrderClaim", + exchange_id: "OrderExchange", + }, + models: [ + Order, + OrderAddress, + OrderChange, + OrderClaim, + OrderExchange, + OrderLineItem, + OrderShippingMethod, + OrderTransaction, + Return, + ReturnReason, + ], +}) diff --git a/packages/modules/order/src/schema/index.ts b/packages/modules/order/src/schema/index.ts new file mode 100644 index 0000000000..77288e3242 --- /dev/null +++ b/packages/modules/order/src/schema/index.ts @@ -0,0 +1,573 @@ +export default ` +enum ChangeActionType { + CANCEL_RETURN_ITEM + FULFILL_ITEM + CANCEL_ITEM_FULFILLMENT + ITEM_ADD + ITEM_REMOVE + ITEM_UPDATE + RECEIVE_DAMAGED_RETURN_ITEM + RECEIVE_RETURN_ITEM + RETURN_ITEM + SHIPPING_ADD + SHIPPING_REMOVE + SHIP_ITEM + WRITE_OFF_ITEM + REINSTATE_ITEM +} + +type OrderSummary { + total: Float + subtotal: Float + total_tax: Float + ordered_total: Float + fulfilled_total: Float + returned_total: Float + return_request_total: Float + write_off_total: Float + projected_total: Float + net_total: Float + net_subtotal: Float + net_total_tax: Float + balance: Float + paid_total: Float + refunded_total: Float + pending_difference: Float + raw_pending_difference: JSON +} + +type OrderAdjustmentLine { + id: ID! + code: String + amount: Float + order_id: String! + description: String + promotion_id: String + provider_id: String + created_at: DateTime + updated_at: DateTime +} + +type OrderShippingMethodAdjustment { + id: ID! + code: String + amount: Float + order_id: String! + description: String + promotion_id: String + provider_id: String + created_at: DateTime + updated_at: DateTime + shipping_method: OrderShippingMethod + shipping_method_id: String! +} + +type OrderLineItemAdjustment { + id: ID! + code: String + amount: Float + order_id: String! + description: String + promotion_id: String + provider_id: String + created_at: DateTime + updated_at: DateTime + item: OrderLineItem + item_id: String! +} + +type OrderTaxLine { + id: ID! + description: String + tax_rate_id: String + code: String! + rate: Float + provider_id: String + created_at: DateTime + updated_at: DateTime +} + +type OrderShippingMethodTaxLine { + id: ID! + description: String + tax_rate_id: String + code: String! + rate: Float + provider_id: String + created_at: DateTime + updated_at: DateTime + shipping_method: OrderShippingMethod + shipping_method_id: String! + total: Float + subtotal: Float + raw_total: JSON + raw_subtotal: JSON +} + +type OrderLineItemTaxLine { + id: ID! + description: String + tax_rate_id: String + code: String! + rate: Float + provider_id: String + created_at: DateTime + updated_at: DateTime + item: OrderLineItem + item_id: String! + total: Float + subtotal: Float + raw_total: JSON + raw_subtotal: JSON +} + +type OrderAddress { + id: ID! + customer_id: String + first_name: String + last_name: String + phone: String + company: String + address_1: String + address_2: String + city: String + country_code: String + province: String + postal_code: String + metadata: JSON + created_at: DateTime + updated_at: DateTime +} + +type OrderShippingMethod { + id: ID! + order_id: String! + name: String! + description: String + amount: Float + raw_amount: JSON + is_tax_inclusive: Boolean + shipping_option_id: String + data: JSON + metadata: JSON + tax_lines: [OrderShippingMethodTaxLine] + adjustments: [OrderShippingMethodAdjustment] + created_at: DateTime + updated_at: DateTime + original_total: Float + original_subtotal: Float + original_tax_total: Float + total: Float + subtotal: Float + tax_total: Float + discount_total: Float + discount_tax_total: Float + raw_original_total: JSON + raw_original_subtotal: JSON + raw_original_tax_total: JSON + raw_total: JSON + raw_subtotal: JSON + raw_tax_total: JSON + raw_discount_total: JSON + raw_discount_tax_total: JSON +} + +type OrderLineItem { + id: ID! + title: String! + subtitle: String + thumbnail: String + variant_id: String + product_id: String + product_title: String + product_description: String + product_subtitle: String + product_type: String + product_collection: String + product_handle: String + variant_sku: String + variant_barcode: String + variant_title: String + variant_option_values: JSON + requires_shipping: Boolean! + is_discountable: Boolean! + is_tax_inclusive: Boolean! + compare_at_unit_price: Float + raw_compare_at_unit_price: JSON + unit_price: Float! + raw_unit_price: JSON + quantity: Int! + raw_quantity: JSON + tax_lines: [OrderLineItemTaxLine] + adjustments: [OrderLineItemAdjustment] + detail: OrderItem! + created_at: DateTime! + updated_at: DateTime! + metadata: JSON + original_total: Float + original_subtotal: Float + original_tax_total: Float + item_total: Float + item_subtotal: Float + item_tax_total: Float + total: Float + subtotal: Float + tax_total: Float + discount_total: Float + discount_tax_total: Float + refundable_total: Float + refundable_total_per_unit: Float + raw_original_total: JSON + raw_original_subtotal: JSON + raw_original_tax_total: JSON + raw_item_total: JSON + raw_item_subtotal: JSON + raw_item_tax_total: JSON + raw_total: JSON + raw_subtotal: JSON + raw_tax_total: JSON + raw_discount_total: JSON + raw_discount_tax_total: JSON + raw_refundable_total: JSON + raw_refundable_total_per_unit: JSON +} + +type OrderItem { + id: ID! + item_id: String! + item: OrderLineItem! + quantity: Int! + raw_quantity: JSON + fulfilled_quantity: Int! + raw_fulfilled_quantity: JSON + shipped_quantity: Int! + raw_shipped_quantity: JSON + return_requested_quantity: Int! + raw_return_requested_quantity: JSON + return_received_quantity: Int! + raw_return_received_quantity: JSON + return_dismissed_quantity: Int! + raw_return_dismissed_quantity: JSON + written_off_quantity: Int! + raw_written_off_quantity: JSON + metadata: JSON + created_at: DateTime! + updated_at: DateTime! +} + +enum OrderStatus { + pending + completed + draft + archived + canceled + requires_action +} + +type Order { + id: ID! + version: Int! + order_change: OrderChange + status: OrderStatus! + region_id: String + customer_id: String + sales_channel_id: String + email: String + currency_code: String! + shipping_address: OrderAddress + billing_address: OrderAddress + items: [OrderLineItem] + shipping_methods: [OrderShippingMethod] + transactions: [OrderTransaction] + summary: OrderSummary + metadata: JSON + canceled_at: DateTime + created_at: DateTime! + updated_at: DateTime! + original_item_total: Float! + original_item_subtotal: Float! + original_item_tax_total: Float! + item_total: Float! + item_subtotal: Float! + item_tax_total: Float! + original_total: Float! + original_subtotal: Float! + original_tax_total: Float! + total: Float! + subtotal: Float! + tax_total: Float! + discount_total: Float! + discount_tax_total: Float! + gift_card_total: Float! + gift_card_tax_total: Float! + shipping_total: Float! + shipping_subtotal: Float! + shipping_tax_total: Float! + original_shipping_total: Float! + original_shipping_subtotal: Float! + original_shipping_tax_total: Float! + raw_original_item_total: JSON + raw_original_item_subtotal: JSON + raw_original_item_tax_total: JSON + raw_item_total: JSON + raw_item_subtotal: JSON + raw_item_tax_total: JSON + raw_original_total: JSON + raw_original_subtotal: JSON + raw_original_tax_total: JSON + raw_total: JSON + raw_subtotal: JSON + raw_tax_total: JSON + raw_discount_total: JSON + raw_discount_tax_total: JSON + raw_gift_card_total: JSON + raw_gift_card_tax_total: JSON + raw_shipping_total: JSON + raw_shipping_subtotal: JSON + raw_shipping_tax_total: JSON + raw_original_shipping_total: JSON + raw_original_shipping_subtotal: JSON + raw_original_shipping_tax_total: JSON +} + +enum ReturnStatus { + requested + received + partially_received + canceled +} + +type Return { + id: ID! + status: ReturnStatus! + refund_amount: Float + order_id: String! + items: [OrderReturnItem]! +} + +type OrderReturnItem { + id: ID! + return_id: String! + order_id: String! + item_id: String! + reason_id: String + quantity: Int! + raw_quantity: JSON + received_quantity: Int + raw_received_quantity: JSON + metadata: JSON + created_at: DateTime + updated_at: DateTime +} + +type OrderClaimItem { + id: ID! + claim_id: String! + order_id: String! + item_id: String! + quantity: Int! + reason: ClaimReason! + raw_quantity: JSON + metadata: JSON + created_at: DateTime + updated_at: DateTime +} + +type OrderClaimItemImage { + id: ID! + claim_item_id: String! + url: String + metadata: JSON + created_at: DateTime + updated_at: DateTime +} + +type OrderExchangeItem { + id: ID! + exchange_id: String! + order_id: String! + item_id: String! + quantity: Int! + raw_quantity: JSON + metadata: JSON + created_at: DateTime + updated_at: DateTime +} + +type OrderClaim { + order_id: String! + claim_items: [OrderClaimItem]! + additional_items: [OrderClaimItem]! + return: Return + return_id: String + no_notification: Boolean + refund_amount: Float + created_by: String +} + +type OrderExchange { + order_id: String! + return_items: [OrderReturnItem]! + additional_items: [OrderClaimItem]! + no_notification: Boolean + difference_due: Float + return: Return + return_id: String + created_by: String +} + +enum PaymentStatus { + not_paid + awaiting + authorized + partially_authorized + captured + partially_captured + partially_refunded + refunded + canceled + requires_action +} + +enum FulfillmentStatus { + not_fulfilled + partially_fulfilled + fulfilled + partially_shipped + shipped + partially_delivered + delivered + canceled +} + +type OrderDetail { + id: ID! + version: Int! + order_change: OrderChange + status: OrderStatus! + region_id: String + customer_id: String + sales_channel_id: String + email: String + currency_code: String! + shipping_address: OrderAddress + billing_address: OrderAddress + items: [OrderLineItem] + shipping_methods: [OrderShippingMethod] + transactions: [OrderTransaction] + summary: OrderSummary + metadata: JSON + canceled_at: DateTime + created_at: DateTime! + updated_at: DateTime! + original_item_total: Float! + original_item_subtotal: Float! + original_item_tax_total: Float! + item_total: Float! + item_subtotal: Float! + item_tax_total: Float! + original_total: Float! + original_subtotal: Float! + original_tax_total: Float! + total: Float! + subtotal: Float! + tax_total: Float! + discount_total: Float! + discount_tax_total: Float! + gift_card_total: Float! + gift_card_tax_total: Float! + shipping_total: Float! + shipping_subtotal: Float! + shipping_tax_total: Float! + original_shipping_total: Float! + original_shipping_subtotal: Float! + original_shipping_tax_total: Float! + raw_original_item_total: JSON + raw_original_item_subtotal: JSON + raw_original_item_tax_total: JSON + raw_item_total: JSON + raw_item_subtotal: JSON + raw_item_tax_total: JSON + raw_original_total: JSON + raw_original_subtotal: JSON + raw_original_tax_total: JSON + raw_total: JSON + raw_subtotal: JSON + raw_tax_total: JSON + raw_discount_total: JSON + raw_discount_tax_total: JSON + raw_gift_card_total: JSON + raw_gift_card_tax_total: JSON + raw_shipping_total: JSON + raw_shipping_subtotal: JSON + raw_shipping_tax_total: JSON + raw_original_shipping_total: JSON + raw_original_shipping_subtotal: JSON + raw_original_shipping_tax_total: JSON + payment_collections: [PaymentCollection] + payment_status: PaymentStatus! + fulfillments: [Fulfillment] + fulfillment_status: FulfillmentStatus! +} + +type OrderChange { + id: ID! + version: Int! + change_type: String + order_id: String! + return_id: String + exchange_id: String + claim_id: String + order: Order! + return_order: Return + exchange: OrderExchange + claim: OrderClaim + actions: [OrderChangeAction]! + status: String! + requested_by: String + requested_at: DateTime + confirmed_by: String + confirmed_at: DateTime + declined_by: String + declined_reason: String + metadata: JSON + declined_at: DateTime + canceled_by: String + canceled_at: DateTime + created_at: DateTime! + updated_at: DateTime! +} + +type OrderChangeAction { + id: ID! + order_change_id: String + order_change: OrderChange + order_id: String + return_id: String + claim_id: String + exchange_id: String + order: Order + reference: String! + reference_id: String! + action: ChangeActionType! + details: JSON + internal_note: String + created_at: DateTime! + updated_at: DateTime! +} + +type OrderTransaction { + id: ID! + order_id: String! + order: Order! + amount: Float! + raw_amount: JSON + currency_code: String! + reference: String! + reference_id: String! + metadata: JSON + created_at: DateTime! + updated_at: DateTime! +} + +` diff --git a/packages/modules/order/src/services/order-module-service.ts b/packages/modules/order/src/services/order-module-service.ts index 12d059d22c..6e5b62b9ab 100644 --- a/packages/modules/order/src/services/order-module-service.ts +++ b/packages/modules/order/src/services/order-module-service.ts @@ -6,6 +6,7 @@ import { FindConfig, IOrderModuleService, InternalModuleDeclaration, + ModuleJoinerConfig, ModulesSdkTypes, OrderDTO, OrderReturnReasonDTO, @@ -73,6 +74,7 @@ import { UpdateOrderShippingMethodTaxLineDTO, } from "@types" import { UpdateReturnReasonDTO } from "src/types/return-reason" +import { joinerConfig } from "../joiner-config" import { ApplyOrderChangeDTO, applyChangesToOrder, @@ -260,6 +262,10 @@ export default class OrderModuleService< this.orderExchangeService_ = orderExchangeService } + __joinerConfig(): ModuleJoinerConfig { + return joinerConfig + } + private shouldIncludeTotals(config: FindConfig): boolean { const totalFields = [ "total", diff --git a/packages/modules/payment/integration-tests/__tests__/services/payment-module/index.spec.ts b/packages/modules/payment/integration-tests/__tests__/services/payment-module/index.spec.ts index afc8e63744..552ad4fd17 100644 --- a/packages/modules/payment/integration-tests/__tests__/services/payment-module/index.spec.ts +++ b/packages/modules/payment/integration-tests/__tests__/services/payment-module/index.spec.ts @@ -4,8 +4,8 @@ import { PaymentModuleService } from "@services" import { moduleIntegrationTestRunner } from "medusa-test-utils" import { createPaymentCollections, - createPayments, createPaymentSessions, + createPayments, } from "../../../__fixtures__" jest.setTimeout(30000) @@ -23,6 +23,7 @@ moduleIntegrationTestRunner({ "payment", "paymentCollection", "paymentProvider", + "paymentSession", "refundReason", ]) @@ -55,6 +56,14 @@ moduleIntegrationTestRunner({ field: "paymentProvider", }, }, + paymentSession: { + id: { + field: "paymentSession", + linkable: "payment_session_id", + primaryKey: "id", + serviceName: "payment", + }, + }, refundReason: { id: { linkable: "refund_reason_id", diff --git a/packages/modules/payment/src/joiner-config.ts b/packages/modules/payment/src/joiner-config.ts index d6153bc4ae..cf4e9a0d5b 100644 --- a/packages/modules/payment/src/joiner-config.ts +++ b/packages/modules/payment/src/joiner-config.ts @@ -6,8 +6,10 @@ import { PaymentSession, RefundReason, } from "@models" +import { default as schema } from "./schema" export const joinerConfig = defineJoinerConfig(Modules.PAYMENT, { + schema, models: [ Payment, PaymentCollection, diff --git a/packages/modules/payment/src/schema/index.ts b/packages/modules/payment/src/schema/index.ts new file mode 100644 index 0000000000..ba50266f90 --- /dev/null +++ b/packages/modules/payment/src/schema/index.ts @@ -0,0 +1,111 @@ +export default ` +enum PaymentCollectionStatus { + not_paid + awaiting + authorized + partially_authorized + canceled +} + +enum PaymentSessionStatus { + authorized + captured + pending + requires_more + error + canceled +} + +type PaymentCollection { + id: ID! + currency_code: String! + region_id: String! + amount: Float! + authorized_amount: Float + refunded_amount: Float + captured_amount: Float + completed_at: DateTime + created_at: DateTime + updated_at: DateTime + metadata: JSON + status: PaymentCollectionStatus! + payment_providers: [PaymentProviderDTO!]! + payment_sessions: [PaymentSessionDTO] + payments: [PaymentDTO] +} + +type Payment { + id: ID! + amount: Float! + raw_amount: Float + authorized_amount: Float + raw_authorized_amount: Float + currency_code: String! + provider_id: String! + cart_id: String + order_id: String + order_edit_id: String + customer_id: String + data: JSON + created_at: DateTime + updated_at: DateTime + captured_at: DateTime + canceled_at: DateTime + captured_amount: Float + raw_captured_amount: Float + refunded_amount: Float + raw_refunded_amount: Float + captures: [CaptureDTO] + refunds: [RefundDTO] + payment_collection_id: String! + payment_collection: PaymentCollectionDTO + payment_session: PaymentSessionDTO +} + +type Capture { + id: ID! + amount: Float! + created_at: DateTime! + created_by: String + payment: Payment! +} + +type Refund { + id: ID! + amount: Float! + refund_reason_id: String + refund_reason: RefundReason + note: String + created_at: DateTime! + created_by: String + payment: Payment! +} + +type PaymentSession { + id: ID! + amount: Float! + currency_code: String! + provider_id: String! + data: JSON! + context: JSON + status: PaymentSessionStatus! + authorized_at: DateTime + payment_collection_id: String! + payment_collection: PaymentCollection + payment: Payment +} + +type PaymentProvider { + id: ID! + is_enabled: String! +} + +type RefundReason { + id: ID! + label: String! + description: String + metadata: JSON + created_at: DateTime! + updated_at: DateTime! +} +` diff --git a/packages/modules/pricing/src/joiner-config.ts b/packages/modules/pricing/src/joiner-config.ts index 42af561638..fa846a98cb 100644 --- a/packages/modules/pricing/src/joiner-config.ts +++ b/packages/modules/pricing/src/joiner-config.ts @@ -1,6 +1,8 @@ import { defineJoinerConfig, Modules } from "@medusajs/utils" import { Price, PriceList, PricePreference, PriceSet } from "@models" +import { default as schema } from "./schema" export const joinerConfig = defineJoinerConfig(Modules.PRICING, { + schema, models: [PriceSet, PriceList, Price, PricePreference], }) diff --git a/packages/modules/pricing/src/schema/index.ts b/packages/modules/pricing/src/schema/index.ts index 1073e8b985..3c63f22d7c 100644 --- a/packages/modules/pricing/src/schema/index.ts +++ b/packages/modules/pricing/src/schema/index.ts @@ -1,15 +1,58 @@ export const schema = ` type PriceSet { - id: String! - money_amounts: [MoneyAmount] + id: ID! + prices: [MoneyAmount] + calculated_price: CalculatedPriceSet } type MoneyAmount { - id: String! + id: ID! currency_code: String amount: Float min_quantity: Float max_quantity: Float + rules_count: Int + price_rules: [PriceRule] + created_at: DateTime + updated_at: DateTime + deleted_at: DateTime +} + +type PriceRule { + id: ID! + price_set_id: String! + price_set: PriceSet + attribute: String! + value: String! + priority: Int! + price_id: String! + price_list_id: String! + created_at: DateTime + updated_at: DateTime + deleted_at: DateTime +} + +type CalculatedPriceSet { + id: ID! + is_calculated_price_price_list: Boolean + is_calculated_price_tax_inclusive: Boolean + calculated_amount: Float + raw_calculated_amount: JSON + is_original_price_price_list: Boolean + is_original_price_tax_inclusive: Boolean + original_amount: Float + raw_original_amount: JSON + currency_code: String + calculated_price: PriceDetails + original_price: PriceDetails +} + +type PriceDetails { + id: ID + price_list_id: String + price_list_type: String + min_quantity: Float + max_quantity: Float } ` diff --git a/packages/modules/product/integration-tests/__tests__/product.ts b/packages/modules/product/integration-tests/__tests__/product.ts index 106ac93153..127feb66d2 100644 --- a/packages/modules/product/integration-tests/__tests__/product.ts +++ b/packages/modules/product/integration-tests/__tests__/product.ts @@ -9,7 +9,7 @@ import { } from "../__fixtures__/product" import { IProductModuleService, ProductDTO } from "@medusajs/types" -import { kebabCase, Module, Modules, ProductStatus } from "@medusajs/utils" +import { Module, Modules, ProductStatus, kebabCase } from "@medusajs/utils" import { SqlEntityManager } from "@mikro-orm/postgresql" import { ProductCategoryService, @@ -77,6 +77,12 @@ moduleIntegrationTestRunner({ serviceName: "productService", field: "productVariant", }, + variant_id: { + field: "productVariant", + linkable: "variant_id", + primaryKey: "variant_id", + serviceName: "productService", + }, }, productOption: { id: { diff --git a/packages/modules/product/src/joiner-config.ts b/packages/modules/product/src/joiner-config.ts index 1d80bac5ce..02fc74a1ab 100644 --- a/packages/modules/product/src/joiner-config.ts +++ b/packages/modules/product/src/joiner-config.ts @@ -9,8 +9,10 @@ import { ProductVariant, } from "@models" import ProductImage from "./models/product-image" +import { default as schema } from "./schema" export const joinerConfig = defineJoinerConfig(Modules.PRODUCT, { + schema, models: [ Product, ProductVariant, @@ -21,6 +23,10 @@ export const joinerConfig = defineJoinerConfig(Modules.PRODUCT, { ProductCollection, ProductCategory, ], + linkableKeys: { + // Merged with the autogenerated ones to maintain backward compatibility + variant_id: "ProductVariant", + }, primaryKeys: ["id", "handle"], alias: [ { diff --git a/packages/modules/product/src/schema/index.ts b/packages/modules/product/src/schema/index.ts new file mode 100644 index 0000000000..dd48bd5190 --- /dev/null +++ b/packages/modules/product/src/schema/index.ts @@ -0,0 +1,148 @@ +export default ` +enum ProductStatus { + draft + proposed + published + rejected +} + +type Product { + id: ID! + title: String! + handle: String! + subtitle: String + description: String + is_giftcard: Boolean! + status: ProductStatus! + thumbnail: String + width: Float + weight: Float + length: Float + height: Float + origin_country: String + hs_code: String + mid_code: String + material: String + collection: ProductCollection + collection_id: String + categories: [ProductCategory] + type: ProductType + type_id: String + tags: [ProductTag!]! + variants: [ProductVariant!]! + options: [ProductOption!]! + images: [ProductImage!]! + discountable: Boolean + external_id: String + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime + metadata: JSON +} + +type ProductVariant { + id: ID! + title: String! + sku: String + barcode: String + ean: String + upc: String + allow_backorder: Boolean! + manage_inventory: Boolean! + requires_shipping: Boolean! + hs_code: String + origin_country: String + mid_code: String + material: String + weight: Float + length: Float + height: Float + width: Float + options: [ProductOptionValue!]! + metadata: JSON + product: Product + product_id: String + variant_rank: Int + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime +} + +type ProductCategory { + id: ID! + name: String! + description: String! + handle: String! + is_active: Boolean! + is_internal: Boolean! + rank: Int! + metadata: JSON + parent_category: ProductCategory + parent_category_id: String + category_children: [ProductCategory!]! + products: [Product!]! + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime +} + +type ProductTag { + id: ID! + value: String! + metadata: JSON + products: [Product] +} + +type ProductCollection { + id: ID! + title: String! + handle: String! + metadata: JSON + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime + products: [Product] +} + +type ProductType { + id: ID! + value: String! + metadata: JSON + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime +} + +type ProductOption { + id: ID! + title: String! + product: Product + product_id: String + values: [ProductOptionValue!]! + metadata: JSON + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime +} + +type ProductImage { + id: ID! + url: String! + metadata: JSON + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime +} + +type ProductOptionValue { + id: ID! + value: String! + option: ProductOption + option_id: String + metadata: JSON + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime +} + +` diff --git a/packages/modules/promotion/src/joiner-config.ts b/packages/modules/promotion/src/joiner-config.ts index 7f71a9bdda..114ce805db 100644 --- a/packages/modules/promotion/src/joiner-config.ts +++ b/packages/modules/promotion/src/joiner-config.ts @@ -1,6 +1,8 @@ import { defineJoinerConfig, Modules } from "@medusajs/utils" import { Campaign, Promotion, PromotionRule } from "@models" +import { default as schema } from "./schema" export const joinerConfig = defineJoinerConfig(Modules.PROMOTION, { + schema, models: [Promotion, Campaign, PromotionRule], }) diff --git a/packages/modules/promotion/src/schema/index.ts b/packages/modules/promotion/src/schema/index.ts new file mode 100644 index 0000000000..ecaa60b4de --- /dev/null +++ b/packages/modules/promotion/src/schema/index.ts @@ -0,0 +1,96 @@ +export default ` +enum PromotionTypeValues { + standard + buyget +} + +enum PromotionRuleOperatorValues { + gt + lt + eq + ne + in + lte + gte +} + +enum CampaignBudgetTypeValues { + spend + usage +} + +enum ApplicationMethodTypeValues { + fixed + percentage +} + +enum ApplicationMethodTargetTypeValues { + order + shipping_methods + items +} + +enum ApplicationMethodAllocationValues { + each + across +} + +type Promotion { + id: ID! + code: String + type: PromotionTypeValues + is_automatic: Boolean + application_method: ApplicationMethod + rules: [PromotionRule] + campaign_id: String + campaign: Campaign +} + +type PromotionRule { + id: ID! + description: String + attribute: String + operator: PromotionRuleOperatorValues + values: [PromotionRuleValue!]! +} + +type PromotionRuleValue { + id: ID! + value: String +} + +type Campaign { + id: ID! + name: String + description: String + campaign_identifier: String + starts_at: DateTime + ends_at: DateTime + budget: CampaignBudget + promotions: [Promotion] +} + +type CampaignBudget { + id: ID! + type: CampaignBudgetTypeValues + limit: Int + used: Int + currency_code: String +} + +type ApplicationMethod { + id: ID! + type: ApplicationMethodTypeValues + target_type: ApplicationMethodTargetTypeValues + allocation: ApplicationMethodAllocationValues + value: Float + currency_code: String + max_quantity: Int + buy_rules_min_quantity: Int + apply_to_quantity: Int + promotion: Promotion + target_rules: [PromotionRule] + buy_rules: [PromotionRule] +} + +` diff --git a/packages/modules/sales-channel/src/joinfer-config.ts b/packages/modules/sales-channel/src/joinfer-config.ts new file mode 100644 index 0000000000..dae9675d4d --- /dev/null +++ b/packages/modules/sales-channel/src/joinfer-config.ts @@ -0,0 +1,6 @@ +import { defineJoinerConfig, Modules } from "@medusajs/utils" +import { default as schema } from "./schema" + +export const joinerConfig = defineJoinerConfig(Modules.SALES_CHANNEL, { + schema, +}) diff --git a/packages/modules/sales-channel/src/schema/index.ts b/packages/modules/sales-channel/src/schema/index.ts new file mode 100644 index 0000000000..27e50abaf0 --- /dev/null +++ b/packages/modules/sales-channel/src/schema/index.ts @@ -0,0 +1,12 @@ +export default ` +type SalesChannel { + id: ID! + name: String! + description: String + is_disabled: Boolean! + created_at: DateTime! + metadata: JSON + updated_at: DateTime! + deleted_at: DateTime +} +` diff --git a/packages/modules/sales-channel/src/services/sales-channel-module.ts b/packages/modules/sales-channel/src/services/sales-channel-module.ts index beeb152dc4..e33b116a4f 100644 --- a/packages/modules/sales-channel/src/services/sales-channel-module.ts +++ b/packages/modules/sales-channel/src/services/sales-channel-module.ts @@ -5,6 +5,7 @@ import { FilterableSalesChannelProps, InternalModuleDeclaration, ISalesChannelModuleService, + ModuleJoinerConfig, ModulesSdkTypes, SalesChannelDTO, UpdateSalesChannelDTO, @@ -21,6 +22,7 @@ import { import { SalesChannel } from "@models" import { UpdateSalesChanneInput } from "@types" +import { joinerConfig } from "../joinfer-config" type InjectedDependencies = { baseRepository: DAL.RepositoryService @@ -46,6 +48,10 @@ export default class SalesChannelModuleService this.salesChannelService_ = salesChannelService } + __joinerConfig(): ModuleJoinerConfig { + return joinerConfig + } + // @ts-expect-error async createSalesChannels( data: CreateSalesChannelDTO[], diff --git a/packages/modules/stock-location-next/integration-tests/__tests__/stock-location-module-service.spec.ts b/packages/modules/stock-location-next/integration-tests/__tests__/stock-location-module-service.spec.ts index e967767fd0..69a652f0c8 100644 --- a/packages/modules/stock-location-next/integration-tests/__tests__/stock-location-module-service.spec.ts +++ b/packages/modules/stock-location-next/integration-tests/__tests__/stock-location-module-service.spec.ts @@ -15,14 +15,31 @@ moduleIntegrationTestRunner({ service: StockLocationModuleService, }).linkable - expect(Object.keys(linkable)).toEqual(["stockLocation"]) + expect(Object.keys(linkable)).toEqual([ + "stockLocationAddress", + "stockLocation", + ]) Object.keys(linkable).forEach((key) => { delete linkable[key].toJSON }) expect(linkable).toEqual({ + stockLocationAddress: { + id: { + linkable: "stock_location_address_id", + primaryKey: "id", + serviceName: "stockLocationService", + field: "stockLocationAddress", + }, + }, stockLocation: { + id: { + field: "stockLocation", + linkable: "stock_location_id", + primaryKey: "id", + serviceName: "stockLocationService", + }, location_id: { linkable: "location_id", primaryKey: "location_id", diff --git a/packages/modules/stock-location-next/src/joiner-config.ts b/packages/modules/stock-location-next/src/joiner-config.ts index 88b7c1403b..d8874d1526 100644 --- a/packages/modules/stock-location-next/src/joiner-config.ts +++ b/packages/modules/stock-location-next/src/joiner-config.ts @@ -1,7 +1,9 @@ import { defineJoinerConfig, Modules } from "@medusajs/utils" import { StockLocation } from "./models" +import { default as schema } from "./schema" export const joinerConfig = defineJoinerConfig(Modules.STOCK_LOCATION, { + schema, linkableKeys: { stock_location_id: StockLocation.name, location_id: StockLocation.name, diff --git a/packages/modules/stock-location-next/src/schema/index.ts b/packages/modules/stock-location-next/src/schema/index.ts new file mode 100644 index 0000000000..232725cffe --- /dev/null +++ b/packages/modules/stock-location-next/src/schema/index.ts @@ -0,0 +1,29 @@ +export default ` +type StockLocationAddress { + id: ID + address_1: String! + address_2: String + company: String + country_code: String! + city: String + phone: String + postal_code: String + province: String + metadata: JSON + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime +} + +type StockLocation { + id: ID! + name: String! + metadata: JSON + address_id: ID! + address: StockLocationAddress + created_at: DateTime! + updated_at: DateTime! + deleted_at: DateTime +} + +` diff --git a/yarn.lock b/yarn.lock index 546a22575f..86336e8e9a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -43,6 +43,44 @@ __metadata: languageName: node linkType: hard +"@ardatan/relay-compiler@npm:12.0.0": + version: 12.0.0 + resolution: "@ardatan/relay-compiler@npm:12.0.0" + dependencies: + "@babel/core": ^7.14.0 + "@babel/generator": ^7.14.0 + "@babel/parser": ^7.14.0 + "@babel/runtime": ^7.0.0 + "@babel/traverse": ^7.14.0 + "@babel/types": ^7.0.0 + babel-preset-fbjs: ^3.4.0 + chalk: ^4.0.0 + fb-watchman: ^2.0.0 + fbjs: ^3.0.0 + glob: ^7.1.1 + immutable: ~3.7.6 + invariant: ^2.2.4 + nullthrows: ^1.1.1 + relay-runtime: 12.0.0 + signedsource: ^1.0.0 + yargs: ^15.3.1 + peerDependencies: + graphql: "*" + bin: + relay-compiler: bin/relay-compiler + checksum: 7207d65dd39d3a6202fcee81b03338409642a0ff4e7f799b4a074025429ce2b17b6c71c9579a6328b0f4548763ba4efbff0436cddbcad934af00cc4dbc7ac4e1 + languageName: node + linkType: hard + +"@ardatan/sync-fetch@npm:^0.0.1": + version: 0.0.1 + resolution: "@ardatan/sync-fetch@npm:0.0.1" + dependencies: + node-fetch: ^2.6.1 + checksum: cd69134005ef5ea570d55631c8be59b593e2dda2207f616d30618f948af6ee5d227b857aefd56c535e8f7f3ade47083e4e7795b5ee014a6732011c6e5f9eb08f + languageName: node + linkType: hard + "@ariakit/core@npm:0.4.6": version: 0.4.6 resolution: "@ariakit/core@npm:0.4.6" @@ -850,6 +888,23 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/code-frame@npm:7.24.7" + dependencies: + "@babel/highlight": ^7.24.7 + picocolors: ^1.0.0 + checksum: ab0af539473a9f5aeaac7047e377cb4f4edd255a81d84a76058595f8540784cc3fbe8acf73f1e073981104562490aabfb23008cd66dc677a456a4ed5390fdde6 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.25.2": + version: 7.25.4 + resolution: "@babel/compat-data@npm:7.25.4" + checksum: 50d79734d584a28c69d6f5b99adfaa064d0f41609a378aef04eb06accc5b44f8520e68549eba3a082478180957b7d5783f1bfb1672e4ae8574e797ce8bae79fa + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.23.5, @babel/compat-data@npm:^7.24.4": version: 7.24.4 resolution: "@babel/compat-data@npm:7.24.4" @@ -880,6 +935,41 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.14.0, @babel/core@npm:^7.22.9": + version: 7.25.2 + resolution: "@babel/core@npm:7.25.2" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.24.7 + "@babel/generator": ^7.25.0 + "@babel/helper-compilation-targets": ^7.25.2 + "@babel/helper-module-transforms": ^7.25.2 + "@babel/helpers": ^7.25.0 + "@babel/parser": ^7.25.0 + "@babel/template": ^7.25.0 + "@babel/traverse": ^7.25.2 + "@babel/types": ^7.25.2 + convert-source-map: ^2.0.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: a425fa40e73cb72b6464063a57c478bc2de9dbcc19c280f1b55a3d88b35d572e87e8594e7d7b4880331addb6faef641bbeb701b91b41b8806cd4deae5d74f401 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.18.13, @babel/generator@npm:^7.25.0, @babel/generator@npm:^7.25.6": + version: 7.25.6 + resolution: "@babel/generator@npm:7.25.6" + dependencies: + "@babel/types": ^7.25.6 + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.25 + jsesc: ^2.5.1 + checksum: f89282cce4ddc63654470b98086994d219407d025497f483eb03ba102086e11e2b685b27122f6ff2e1d93b5b5fa0c3a6b7e974fbf2e4a75b685041a746a4291e + languageName: node + linkType: hard + "@babel/generator@npm:^7.23.0, @babel/generator@npm:^7.23.5, @babel/generator@npm:^7.24.5, @babel/generator@npm:^7.7.2": version: 7.24.5 resolution: "@babel/generator@npm:7.24.5" @@ -901,6 +991,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-annotate-as-pure@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-annotate-as-pure@npm:7.24.7" + dependencies: + "@babel/types": ^7.24.7 + checksum: 4679f7df4dffd5b3e26083ae65228116c3da34c3fff2c11ae11b259a61baec440f51e30fd236f7a0435b9d471acd93d0bc5a95df8213cbf02b1e083503d81b9a + languageName: node + linkType: hard + "@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.15": version: 7.22.15 resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.15" @@ -910,6 +1009,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.24.8, @babel/helper-compilation-targets@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/helper-compilation-targets@npm:7.25.2" + dependencies: + "@babel/compat-data": ^7.25.2 + "@babel/helper-validator-option": ^7.24.8 + browserslist: ^4.23.1 + lru-cache: ^5.1.1 + semver: ^6.3.1 + checksum: de10e986b5322c9f807350467dc845ec59df9e596a5926a3b5edbb4710d8e3b8009d4396690e70b88c3844fe8ec4042d61436dd4b92d1f5f75655cf43ab07e99 + languageName: node + linkType: hard + "@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.23.6": version: 7.23.6 resolution: "@babel/helper-compilation-targets@npm:7.23.6" @@ -942,6 +1054,23 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-class-features-plugin@npm:^7.18.6": + version: 7.25.4 + resolution: "@babel/helper-create-class-features-plugin@npm:7.25.4" + dependencies: + "@babel/helper-annotate-as-pure": ^7.24.7 + "@babel/helper-member-expression-to-functions": ^7.24.8 + "@babel/helper-optimise-call-expression": ^7.24.7 + "@babel/helper-replace-supers": ^7.25.0 + "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 + "@babel/traverse": ^7.25.4 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: a765d9e0482e13cf96642fa8aa28e6f7d4d7d39f37840d6246e5e10a7c47f47c52d52522edd3073f229449d17ec0db6f9b7b5e398bff6bb0b4994d65957a164c + languageName: node + linkType: hard + "@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.15, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": version: 7.22.15 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.15" @@ -1005,6 +1134,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/helper-member-expression-to-functions@npm:7.24.8" + dependencies: + "@babel/traverse": ^7.24.8 + "@babel/types": ^7.24.8 + checksum: 7e14a5acc91f6cd26305a4441b82eb6f616bd70b096a4d2099a968f16b26d50207eec0b9ebfc466fefd62bd91587ac3be878117cdfec819b7151911183cb0e5a + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.24.1, @babel/helper-module-imports@npm:^7.24.3": version: 7.24.3 resolution: "@babel/helper-module-imports@npm:7.24.3" @@ -1014,6 +1153,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-module-imports@npm:7.24.7" + dependencies: + "@babel/traverse": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: 97c57db6c3eeaea31564286e328a9fb52b0313c5cfcc7eee4bc226aebcf0418ea5b6fe78673c0e4a774512ec6c86e309d0f326e99d2b37bfc16a25a032498af0 + languageName: node + linkType: hard + "@babel/helper-module-transforms@npm:^7.23.3, @babel/helper-module-transforms@npm:^7.24.5": version: 7.24.5 resolution: "@babel/helper-module-transforms@npm:7.24.5" @@ -1029,6 +1178,20 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.24.8, @babel/helper-module-transforms@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/helper-module-transforms@npm:7.25.2" + dependencies: + "@babel/helper-module-imports": ^7.24.7 + "@babel/helper-simple-access": ^7.24.7 + "@babel/helper-validator-identifier": ^7.24.7 + "@babel/traverse": ^7.25.2 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: adaa15970ace0aee5934b5a633789b5795b6229c6a9cf3e09a7e80aa33e478675eee807006a862aa9aa517935d81f88a6db8a9f5936e3a2a40ec75f8062bc329 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" @@ -1038,6 +1201,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-optimise-call-expression@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-optimise-call-expression@npm:7.24.7" + dependencies: + "@babel/types": ^7.24.7 + checksum: ca6a9884705dea5c95a8b3ce132d1e3f2ae951ff74987d400d1d9c215dae9c0f9e29924d8f8e131e116533d182675bc261927be72f6a9a2968eaeeaa51eb1d0f + languageName: node + linkType: hard + "@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.0, @babel/helper-plugin-utils@npm:^7.24.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": version: 7.24.5 resolution: "@babel/helper-plugin-utils@npm:7.24.5" @@ -1045,6 +1217,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/helper-plugin-utils@npm:7.24.8" + checksum: 0376037f94a3bfe6b820a39f81220ac04f243eaee7193774b983e956c1750883ff236b30785795abbcda43fac3ece74750566830c2daa4d6e3870bb0dff34c2d + languageName: node + linkType: hard + "@babel/helper-remap-async-to-generator@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-remap-async-to-generator@npm:7.22.20" @@ -1071,6 +1250,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-replace-supers@npm:^7.24.7, @babel/helper-replace-supers@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/helper-replace-supers@npm:7.25.0" + dependencies: + "@babel/helper-member-expression-to-functions": ^7.24.8 + "@babel/helper-optimise-call-expression": ^7.24.7 + "@babel/traverse": ^7.25.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: b4b6650ab3d56c39a259367cd97f8df2f21c9cebb3716fea7bca40a150f8847bfb82f481e98927c7c6579b48a977b5a8f77318a1c6aeb497f41ecd6dbc3fdfef + languageName: node + linkType: hard + "@babel/helper-simple-access@npm:^7.22.5, @babel/helper-simple-access@npm:^7.24.5": version: 7.24.5 resolution: "@babel/helper-simple-access@npm:7.24.5" @@ -1080,6 +1272,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-simple-access@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-simple-access@npm:7.24.7" + dependencies: + "@babel/traverse": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: 7230e419d59a85f93153415100a5faff23c133d7442c19e0cd070da1784d13cd29096ee6c5a5761065c44e8164f9f80e3a518c41a0256df39e38f7ad6744fed7 + languageName: node + linkType: hard + "@babel/helper-skip-transparent-expression-wrappers@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.22.5" @@ -1089,6 +1291,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.24.7" + dependencies: + "@babel/traverse": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: e3a9b8ac9c262ac976a1bcb5fe59694db5e6f0b4f9e7bdba5c7693b8b5e28113c23bdaa60fe8d3ec32a337091b67720b2053bcb3d5655f5406536c3d0584242b + languageName: node + linkType: hard + "@babel/helper-split-export-declaration@npm:^7.22.6, @babel/helper-split-export-declaration@npm:^7.24.5": version: 7.24.5 resolution: "@babel/helper-split-export-declaration@npm:7.24.5" @@ -1105,6 +1317,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/helper-string-parser@npm:7.24.8" + checksum: 6361f72076c17fabf305e252bf6d580106429014b3ab3c1f5c4eb3e6d465536ea6b670cc0e9a637a77a9ad40454d3e41361a2909e70e305116a23d68ce094c08 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.22.20, @babel/helper-validator-identifier@npm:^7.22.5, @babel/helper-validator-identifier@npm:^7.24.5": version: 7.24.5 resolution: "@babel/helper-validator-identifier@npm:7.24.5" @@ -1112,6 +1331,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-validator-identifier@npm:7.24.7" + checksum: 87ad608694c9477814093ed5b5c080c2e06d44cb1924ae8320474a74415241223cc2a725eea2640dd783ff1e3390e5f95eede978bc540e870053152e58f1d651 + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.23.5": version: 7.23.5 resolution: "@babel/helper-validator-option@npm:7.23.5" @@ -1119,6 +1345,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/helper-validator-option@npm:7.24.8" + checksum: 73db93a34ae89201351288bee7623eed81a54000779462a986105b54ffe82069e764afd15171a428b82e7c7a9b5fec10b5d5603b216317a414062edf5c67a21f + languageName: node + linkType: hard + "@babel/helper-wrap-function@npm:^7.22.20": version: 7.24.5 resolution: "@babel/helper-wrap-function@npm:7.24.5" @@ -1141,6 +1374,16 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.25.0": + version: 7.25.6 + resolution: "@babel/helpers@npm:7.25.6" + dependencies: + "@babel/template": ^7.25.0 + "@babel/types": ^7.25.6 + checksum: 448c1cdabccca42fd97a252f73f1e4bcd93776dbf24044f3b4f49b756bf2ece73ee6df05177473bb74ea7456dddd18d6f481e4d96d2cc7839d078900d48c696c + languageName: node + linkType: hard + "@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.24.2": version: 7.24.5 resolution: "@babel/highlight@npm:7.24.5" @@ -1153,6 +1396,18 @@ __metadata: languageName: node linkType: hard +"@babel/highlight@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/highlight@npm:7.24.7" + dependencies: + "@babel/helper-validator-identifier": ^7.24.7 + chalk: ^2.4.2 + js-tokens: ^4.0.0 + picocolors: ^1.0.0 + checksum: 674334c571d2bb9d1c89bdd87566383f59231e16bcdcf5bb7835babdf03c9ae585ca0887a7b25bdf78f303984af028df52831c7989fecebb5101cc132da9393a + languageName: node + linkType: hard + "@babel/parser@npm:7.23.5": version: 7.23.5 resolution: "@babel/parser@npm:7.23.5" @@ -1171,6 +1426,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.14.0, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.6": + version: 7.25.6 + resolution: "@babel/parser@npm:7.25.6" + dependencies: + "@babel/types": ^7.25.6 + bin: + parser: ./bin/babel-parser.js + checksum: f88a0e895dbb096fd37c4527ea97d12b5fc013720602580a941ac3a339698872f0c911e318c292b184c36b5fbe23b612f05aff9d24071bc847c7b1c21552c41d + languageName: node + linkType: hard + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.24.5": version: 7.24.5 resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.24.5" @@ -1231,6 +1497,33 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-class-properties@npm:^7.0.0": + version: 7.18.6 + resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d5172ac6c9948cdfc387e94f3493ad86cb04035cf7433f86b5d358270b1b9752dc25e176db0c5d65892a246aca7bdb4636672e15626d7a7de4bc0bd0040168d9 + languageName: node + linkType: hard + +"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0": + version: 7.20.7 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.7" + dependencies: + "@babel/compat-data": ^7.20.5 + "@babel/helper-compilation-targets": ^7.20.7 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-transform-parameters": ^7.20.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b9818749bb49d8095df64c45db682448d04743d96722984cbfd375733b2585c26d807f84b4fdb28474f2d614be6a6ffe3d96ffb121840e9e5345b2ccc0438bd8 + languageName: node + linkType: hard + "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": version: 7.21.0-placeholder-for-preset-env.2 resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" @@ -1262,7 +1555,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": +"@babel/plugin-syntax-class-properties@npm:^7.0.0, @babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": version: 7.12.13 resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" dependencies: @@ -1306,6 +1599,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-syntax-flow@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2f0cb7a78379029707e61f6665634a5b758c8b4ccb602a72d798e41d36b0647c2f2de59f90e0c1d522b026962918e54d82f3aee0c194dc87cd340455aa58562a + languageName: node + linkType: hard + "@babel/plugin-syntax-flow@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-syntax-flow@npm:7.24.1" @@ -1317,6 +1621,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-import-assertions@npm:^7.20.0": + version: 7.25.6 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.25.6" + dependencies: + "@babel/helper-plugin-utils": ^7.24.8 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 55afa63b1b1355bcc1d85a9ad9d2c78983e27beee38e232d5c1ab59eac39127ce3c3817d6686e3ab1d0aff5edd8e38a6852885c65d3e518accdd183a445ef411 + languageName: node + linkType: hard + "@babel/plugin-syntax-import-assertions@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-syntax-import-assertions@npm:7.24.1" @@ -1361,6 +1676,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-syntax-jsx@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f44d927a9ae8d5ef016ff5b450e1671e56629ddc12e56b938e41fd46e141170d9dfc9a53d6cb2b9a20a7dd266a938885e6a3981c60c052a2e1daed602ac80e51 + languageName: node + linkType: hard + "@babel/plugin-syntax-jsx@npm:^7.12.1, @babel/plugin-syntax-jsx@npm:^7.23.3, @babel/plugin-syntax-jsx@npm:^7.24.1, @babel/plugin-syntax-jsx@npm:^7.7.2": version: 7.24.1 resolution: "@babel/plugin-syntax-jsx@npm:7.24.1" @@ -1405,7 +1731,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": +"@babel/plugin-syntax-object-rest-spread@npm:^7.0.0, @babel/plugin-syntax-object-rest-spread@npm:^7.8.3": version: 7.8.3 resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" dependencies: @@ -1483,6 +1809,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-arrow-functions@npm:^7.0.0": + version: 7.24.7 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6ac05a54e5582f34ac6d5dc26499e227227ec1c7fa6fc8de1f3d40c275f140d3907f79bbbd49304da2d7008a5ecafb219d0b71d78ee3290ca22020d878041245 + languageName: node + linkType: hard + "@babel/plugin-transform-arrow-functions@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-arrow-functions@npm:7.24.1" @@ -1521,6 +1858,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-block-scoped-functions@npm:^7.0.0": + version: 7.24.7 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 113e86de4612ae91773ff5cb6b980f01e1da7e26ae6f6012127415d7ae144e74987bc23feb97f63ba4bc699331490ddea36eac004d76a20d5369e4cc6a7f61cd + languageName: node + linkType: hard + "@babel/plugin-transform-block-scoped-functions@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.1" @@ -1532,6 +1880,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-block-scoping@npm:^7.0.0": + version: 7.25.0 + resolution: "@babel/plugin-transform-block-scoping@npm:7.25.0" + dependencies: + "@babel/helper-plugin-utils": ^7.24.8 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 382931c75a5d0ea560387e76cb57b03461300527e4784efcb2fb62f36c1eb0ab331327b6034def256baa0cad9050925a61f9c0d56261b6afd6a29c3065fb0bd4 + languageName: node + linkType: hard + "@babel/plugin-transform-block-scoping@npm:^7.24.5": version: 7.24.5 resolution: "@babel/plugin-transform-block-scoping@npm:7.24.5" @@ -1568,6 +1927,22 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-classes@npm:^7.0.0": + version: 7.25.4 + resolution: "@babel/plugin-transform-classes@npm:7.25.4" + dependencies: + "@babel/helper-annotate-as-pure": ^7.24.7 + "@babel/helper-compilation-targets": ^7.25.2 + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-replace-supers": ^7.25.0 + "@babel/traverse": ^7.25.4 + globals: ^11.1.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c68424d9dd64860825111aa4a4ed5caf29494b7a02ddb9c36351d768c41e8e05127d89274795cdfcade032d9d299e6c677418259df58c71e68f1741583dcf467 + languageName: node + linkType: hard + "@babel/plugin-transform-classes@npm:^7.24.5": version: 7.24.5 resolution: "@babel/plugin-transform-classes@npm:7.24.5" @@ -1586,6 +1961,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-computed-properties@npm:^7.0.0": + version: 7.24.7 + resolution: "@babel/plugin-transform-computed-properties@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/template": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 25636dbc1f605c0b8bc60aa58628a916b689473d11551c9864a855142e36742fe62d4a70400ba3b74902338e77fb3d940376c0a0ba154b6b7ec5367175233b49 + languageName: node + linkType: hard + "@babel/plugin-transform-computed-properties@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-computed-properties@npm:7.24.1" @@ -1598,6 +1985,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-destructuring@npm:^7.0.0": + version: 7.24.8 + resolution: "@babel/plugin-transform-destructuring@npm:7.24.8" + dependencies: + "@babel/helper-plugin-utils": ^7.24.8 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 804968c1d5f5072c717505296c1e5d5ec33e90550423de66de82bbcb78157156e8470bbe77a04ab8c710a88a06360a30103cf223ac7eff4829adedd6150de5ce + languageName: node + linkType: hard + "@babel/plugin-transform-destructuring@npm:^7.24.5": version: 7.24.5 resolution: "@babel/plugin-transform-destructuring@npm:7.24.5" @@ -1668,6 +2066,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-flow-strip-types@npm:^7.0.0": + version: 7.25.2 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.25.2" + dependencies: + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/plugin-syntax-flow": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 821f5ccdb8104e09764d8a24d4c0dd4fe9e264d95e6477269c911e15240a63343d3fe71b6cf9382273766a0e86a015c2867d26fd75e5827134d990c93fa9e605 + languageName: node + linkType: hard + "@babel/plugin-transform-flow-strip-types@npm:^7.12.10, @babel/plugin-transform-flow-strip-types@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-flow-strip-types@npm:7.24.1" @@ -1680,6 +2090,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-for-of@npm:^7.0.0": + version: 7.24.7 + resolution: "@babel/plugin-transform-for-of@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 77629b1173e55d07416f05ba7353caa09d2c2149da2ca26721ab812209b63689d1be45116b68eadc011c49ced59daf5320835b15245eb7ae93ae0c5e8277cfc0 + languageName: node + linkType: hard + "@babel/plugin-transform-for-of@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-for-of@npm:7.24.1" @@ -1692,6 +2114,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-function-name@npm:^7.0.0": + version: 7.25.1 + resolution: "@babel/plugin-transform-function-name@npm:7.25.1" + dependencies: + "@babel/helper-compilation-targets": ^7.24.8 + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/traverse": ^7.25.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e74912174d5e33d1418b840443c2e226a7b76cc017c1ed20ee30a566e4f1794d4a123be03180da046241576e8b692731807ba1f52608922acf1cb2cb6957593f + languageName: node + linkType: hard + "@babel/plugin-transform-function-name@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-function-name@npm:7.24.1" @@ -1717,6 +2152,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-literals@npm:^7.0.0": + version: 7.25.2 + resolution: "@babel/plugin-transform-literals@npm:7.25.2" + dependencies: + "@babel/helper-plugin-utils": ^7.24.8 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0796883217b0885d37e7f6d350773be349e469a812b6bf11ccf862a6edf65103d3e7c849529d65381b441685c12e756751d8c2489a0fd3f8139bb5ef93185f58 + languageName: node + linkType: hard + "@babel/plugin-transform-literals@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-literals@npm:7.24.1" @@ -1740,6 +2186,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-member-expression-literals@npm:^7.0.0": + version: 7.24.7 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e789ae359bdf2d20e90bedef18dfdbd965c9ebae1cee398474a0c349590fda7c8b874e1a2ceee62e47e5e6ec1730e76b0f24e502164357571854271fc12cc684 + languageName: node + linkType: hard + "@babel/plugin-transform-member-expression-literals@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-member-expression-literals@npm:7.24.1" @@ -1763,6 +2220,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-commonjs@npm:^7.0.0": + version: 7.24.8 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.8" + dependencies: + "@babel/helper-module-transforms": ^7.24.8 + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-simple-access": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f1cf552307ebfced20d3907c1dd8be941b277f0364aa655e2b5fee828c84c54065745183104dae86f1f93ea0406db970a463ef7ceaaed897623748e99640e5a7 + languageName: node + linkType: hard + "@babel/plugin-transform-modules-commonjs@npm:^7.23.0, @babel/plugin-transform-modules-commonjs@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.1" @@ -1863,6 +2333,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-object-super@npm:^7.0.0": + version: 7.24.7 + resolution: "@babel/plugin-transform-object-super@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-replace-supers": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 770cebb4b4e1872c216b17069db9a13b87dfee747d359dc56d9fcdd66e7544f92dc6ab1861a4e7e0528196aaff2444e4f17dc84efd8eaf162d542b4ba0943869 + languageName: node + linkType: hard + "@babel/plugin-transform-object-super@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-object-super@npm:7.24.1" @@ -1900,6 +2382,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.20.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-parameters@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 53bf190d6926771545d5184f1f5f3f5144d0f04f170799ad46a43f683a01fab8d5fe4d2196cf246774530990c31fe1f2b9f0def39f0a5ddbb2340b924f5edf01 + languageName: node + linkType: hard + "@babel/plugin-transform-parameters@npm:^7.24.5": version: 7.24.5 resolution: "@babel/plugin-transform-parameters@npm:7.24.5" @@ -1937,6 +2430,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-property-literals@npm:^7.0.0": + version: 7.24.7 + resolution: "@babel/plugin-transform-property-literals@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 52564b58f3d111dc02d241d5892a4b01512e98dfdf6ef11b0ed62f8b11b0acacccef0fc229b44114fe8d1a57a8b70780b11bdd18b807d3754a781a07d8f57433 + languageName: node + linkType: hard + "@babel/plugin-transform-property-literals@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-property-literals@npm:7.24.1" @@ -1948,6 +2452,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-display-name@npm:^7.0.0": + version: 7.24.7 + resolution: "@babel/plugin-transform-react-display-name@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c14a07a9e75723c96f1a0a306b8a8e899ff1c6a0cc3d62bcda79bb1b54e4319127b258651c513a1a47da152cdc22e16525525a30ae5933a2980c7036fd0b4d24 + languageName: node + linkType: hard + "@babel/plugin-transform-react-display-name@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-react-display-name@npm:7.24.1" @@ -1992,6 +2507,21 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-jsx@npm:^7.0.0": + version: 7.25.2 + resolution: "@babel/plugin-transform-react-jsx@npm:7.25.2" + dependencies: + "@babel/helper-annotate-as-pure": ^7.24.7 + "@babel/helper-module-imports": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/plugin-syntax-jsx": ^7.24.7 + "@babel/types": ^7.25.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8c5b515f38118471197605e02bea54a8a4283010e3c55bad8cfb78de59ad63612b14d40baca63689afdc9d57b147aac4c7794fe5f7736c9e1ed6dd38784be624 + languageName: node + linkType: hard + "@babel/plugin-transform-react-jsx@npm:^7.12.11, @babel/plugin-transform-react-jsx@npm:^7.22.5, @babel/plugin-transform-react-jsx@npm:^7.23.4": version: 7.23.4 resolution: "@babel/plugin-transform-react-jsx@npm:7.23.4" @@ -2042,6 +2572,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-shorthand-properties@npm:^7.0.0": + version: 7.24.7 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 41b155bdbb3be66618358488bf7731b3b2e8fff2de3dbfd541847720a9debfcec14db06a117abedd03c9cd786db20a79e2a86509a4f19513f6e1b610520905cf + languageName: node + linkType: hard + "@babel/plugin-transform-shorthand-properties@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-shorthand-properties@npm:7.24.1" @@ -2053,6 +2594,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-spread@npm:^7.0.0": + version: 7.24.7 + resolution: "@babel/plugin-transform-spread@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: facba1553035f76b0d2930d4ada89a8cd0f45b79579afd35baefbfaf12e3b86096995f4b0c402cf9ee23b3f2ea0a4460c3b1ec0c192d340962c948bb223d4e66 + languageName: node + linkType: hard + "@babel/plugin-transform-spread@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-spread@npm:7.24.1" @@ -2076,6 +2629,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-template-literals@npm:^7.0.0": + version: 7.24.7 + resolution: "@babel/plugin-transform-template-literals@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3630f966257bcace122f04d3157416a09d40768c44c3a800855da81146b009187daa21859d1c3b7d13f4e19e8888e60613964b175b2275d451200fb6d8d6cfe6 + languageName: node + linkType: hard + "@babel/plugin-transform-template-literals@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-transform-template-literals@npm:7.24.1" @@ -2329,6 +2893,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.0.0": + version: 7.25.6 + resolution: "@babel/runtime@npm:7.25.6" + dependencies: + regenerator-runtime: ^0.14.0 + checksum: d6143adf5aa1ce79ed374e33fdfd74fa975055a80bc6e479672ab1eadc4e4bfd7484444e17dd063a1d180e051f3ec62b357c7a2b817e7657687b47313158c3d2 + languageName: node + linkType: hard + "@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.10, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.8, @babel/runtime@npm:^7.24.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": version: 7.24.5 resolution: "@babel/runtime@npm:7.24.5" @@ -2338,6 +2911,17 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.18.10, @babel/template@npm:^7.24.7, @babel/template@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/template@npm:7.25.0" + dependencies: + "@babel/code-frame": ^7.24.7 + "@babel/parser": ^7.25.0 + "@babel/types": ^7.25.0 + checksum: 4e31afd873215744c016e02b04f43b9fa23205d6d0766fb2e93eb4091c60c1b88897936adb895fb04e3c23de98dfdcbe31bc98daaa1a4e0133f78bb948e1209b + languageName: node + linkType: hard + "@babel/template@npm:^7.20.7, @babel/template@npm:^7.22.15, @babel/template@npm:^7.24.0, @babel/template@npm:^7.3.3": version: 7.24.0 resolution: "@babel/template@npm:7.24.0" @@ -2367,6 +2951,21 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.1, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.4": + version: 7.25.6 + resolution: "@babel/traverse@npm:7.25.6" + dependencies: + "@babel/code-frame": ^7.24.7 + "@babel/generator": ^7.25.6 + "@babel/parser": ^7.25.6 + "@babel/template": ^7.25.0 + "@babel/types": ^7.25.6 + debug: ^4.3.1 + globals: ^11.1.0 + checksum: 964304c6fa46bd705428ba380bf73177eeb481c3f26d82ea3d0661242b59e0dd4329d23886035e9ca9a4ceb565c03a76fd615109830687a27bcd350059d6377e + languageName: node + linkType: hard + "@babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.24.5": version: 7.24.5 resolution: "@babel/traverse@npm:7.24.5" @@ -2407,6 +3006,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.16.8, @babel/types@npm:^7.18.13, @babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.6": + version: 7.25.6 + resolution: "@babel/types@npm:7.25.6" + dependencies: + "@babel/helper-string-parser": ^7.24.8 + "@babel/helper-validator-identifier": ^7.24.7 + to-fast-properties: ^2.0.0 + checksum: 89d45fbee24e27a05dca2d08300a26b905bd384a480448823f6723c72d3a30327c517476389b7280ce8cb9a2c48ef8f47da7f9f6d326faf6f53fd6b68237bdc4 + languageName: node + linkType: hard + "@base2/pretty-print-object@npm:1.0.1": version: 1.0.1 resolution: "@base2/pretty-print-object@npm:1.0.1" @@ -3460,6 +4070,459 @@ __metadata: languageName: node linkType: hard +"@graphql-codegen/add@npm:^5.0.3": + version: 5.0.3 + resolution: "@graphql-codegen/add@npm:5.0.3" + dependencies: + "@graphql-codegen/plugin-helpers": ^5.0.3 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 2ddb8b57a0b445f109b1d8e5611e838ff590dc3c6c210ba1c31e3967e6a58097bceaef79b501eace700cd6210dca0d1ef3d28519ed7b5a4f3ce6cfc8f1508c90 + languageName: node + linkType: hard + +"@graphql-codegen/cli@npm:^5.0.2": + version: 5.0.2 + resolution: "@graphql-codegen/cli@npm:5.0.2" + dependencies: + "@babel/generator": ^7.18.13 + "@babel/template": ^7.18.10 + "@babel/types": ^7.18.13 + "@graphql-codegen/client-preset": ^4.2.2 + "@graphql-codegen/core": ^4.0.2 + "@graphql-codegen/plugin-helpers": ^5.0.3 + "@graphql-tools/apollo-engine-loader": ^8.0.0 + "@graphql-tools/code-file-loader": ^8.0.0 + "@graphql-tools/git-loader": ^8.0.0 + "@graphql-tools/github-loader": ^8.0.0 + "@graphql-tools/graphql-file-loader": ^8.0.0 + "@graphql-tools/json-file-loader": ^8.0.0 + "@graphql-tools/load": ^8.0.0 + "@graphql-tools/prisma-loader": ^8.0.0 + "@graphql-tools/url-loader": ^8.0.0 + "@graphql-tools/utils": ^10.0.0 + "@whatwg-node/fetch": ^0.8.0 + chalk: ^4.1.0 + cosmiconfig: ^8.1.3 + debounce: ^1.2.0 + detect-indent: ^6.0.0 + graphql-config: ^5.0.2 + inquirer: ^8.0.0 + is-glob: ^4.0.1 + jiti: ^1.17.1 + json-to-pretty-yaml: ^1.2.2 + listr2: ^4.0.5 + log-symbols: ^4.0.0 + micromatch: ^4.0.5 + shell-quote: ^1.7.3 + string-env-interpolation: ^1.0.1 + ts-log: ^2.2.3 + tslib: ^2.4.0 + yaml: ^2.3.1 + yargs: ^17.0.0 + peerDependencies: + "@parcel/watcher": ^2.1.0 + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + "@parcel/watcher": + optional: true + bin: + gql-gen: cjs/bin.js + graphql-code-generator: cjs/bin.js + graphql-codegen: cjs/bin.js + graphql-codegen-esm: esm/bin.js + checksum: 6a54981bc0c40f2c95ab38563af1bb9b1ce5b01ba81ebef830f33b9e46623e86fef9ab41059e1187524029b430c8cd58e4e9f4e255f588dec1eaed6b329d6b9d + languageName: node + linkType: hard + +"@graphql-codegen/client-preset@npm:^4.2.2": + version: 4.3.3 + resolution: "@graphql-codegen/client-preset@npm:4.3.3" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/template": ^7.20.7 + "@graphql-codegen/add": ^5.0.3 + "@graphql-codegen/gql-tag-operations": 4.0.9 + "@graphql-codegen/plugin-helpers": ^5.0.4 + "@graphql-codegen/typed-document-node": ^5.0.9 + "@graphql-codegen/typescript": ^4.0.9 + "@graphql-codegen/typescript-operations": ^4.2.3 + "@graphql-codegen/visitor-plugin-common": ^5.3.1 + "@graphql-tools/documents": ^1.0.0 + "@graphql-tools/utils": ^10.0.0 + "@graphql-typed-document-node/core": 3.2.0 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 3d840336b2f88c2f4bc42bf6ae8cae86e04232a9ee3b9a3fdcb090768a519a7628283042f673133025b44c295b789b2c91df3f376e38260d3bf76d038c135df6 + languageName: node + linkType: hard + +"@graphql-codegen/core@npm:^4.0.2": + version: 4.0.2 + resolution: "@graphql-codegen/core@npm:4.0.2" + dependencies: + "@graphql-codegen/plugin-helpers": ^5.0.3 + "@graphql-tools/schema": ^10.0.0 + "@graphql-tools/utils": ^10.0.0 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 8387a91dd852e8c45e76843453fc50dba4e63079f1ecfe2242f3c49561d229d55d1083905f46049ddd7f9f94b8e55a96e6deeac8a0c1db34a7312f5f216ca229 + languageName: node + linkType: hard + +"@graphql-codegen/gql-tag-operations@npm:4.0.9": + version: 4.0.9 + resolution: "@graphql-codegen/gql-tag-operations@npm:4.0.9" + dependencies: + "@graphql-codegen/plugin-helpers": ^5.0.4 + "@graphql-codegen/visitor-plugin-common": 5.3.1 + "@graphql-tools/utils": ^10.0.0 + auto-bind: ~4.0.0 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: fede17379783480809f236b2ea5fd7a16f1bea1390703c3086de3c12b68f98db9a3870216daa6052dd50ff886d29390b8c48ec72a7b44f1254d04fe192e54079 + languageName: node + linkType: hard + +"@graphql-codegen/plugin-helpers@npm:^5.0.3, @graphql-codegen/plugin-helpers@npm:^5.0.4": + version: 5.0.4 + resolution: "@graphql-codegen/plugin-helpers@npm:5.0.4" + dependencies: + "@graphql-tools/utils": ^10.0.0 + change-case-all: 1.0.15 + common-tags: 1.8.2 + import-from: 4.0.0 + lodash: ~4.17.0 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: e1d7af8af8cfd5d8baa4fbf099fbe14ee45d43a2e66af38eb901348163e073a392e53cdd58aad27acf32d14da5b6a7bf06fe1daa793d99e462457f80025dec97 + languageName: node + linkType: hard + +"@graphql-codegen/schema-ast@npm:^4.0.2": + version: 4.1.0 + resolution: "@graphql-codegen/schema-ast@npm:4.1.0" + dependencies: + "@graphql-codegen/plugin-helpers": ^5.0.3 + "@graphql-tools/utils": ^10.0.0 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: ff7ab73f46f1ae4882eda0af8c3f78d37e904108aba37d52288028ee34e9bc56236b6a032a1e2fe1283030ba5f6a5f75224285af12b3f56a76e90843e1eff0e0 + languageName: node + linkType: hard + +"@graphql-codegen/typed-document-node@npm:^5.0.9": + version: 5.0.9 + resolution: "@graphql-codegen/typed-document-node@npm:5.0.9" + dependencies: + "@graphql-codegen/plugin-helpers": ^5.0.4 + "@graphql-codegen/visitor-plugin-common": 5.3.1 + auto-bind: ~4.0.0 + change-case-all: 1.0.15 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: fb9ffdd781af7005c8825cef0c47da5762263dcb2480b81e12b549010262bf35ffb231b08bf52e676467d695758fe9e20d598f7894074d5002a7759df56a84fd + languageName: node + linkType: hard + +"@graphql-codegen/typescript-operations@npm:^4.2.3": + version: 4.2.3 + resolution: "@graphql-codegen/typescript-operations@npm:4.2.3" + dependencies: + "@graphql-codegen/plugin-helpers": ^5.0.4 + "@graphql-codegen/typescript": ^4.0.9 + "@graphql-codegen/visitor-plugin-common": 5.3.1 + auto-bind: ~4.0.0 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: eae0d20d7a6087a47b3ad44d322c5a9bd61e2cb35e44f20652740876a2024593ac02964885ebab155cc958992c8d963561fe3d91f748e067f525f9804937f3c3 + languageName: node + linkType: hard + +"@graphql-codegen/typescript@npm:^4.0.9": + version: 4.0.9 + resolution: "@graphql-codegen/typescript@npm:4.0.9" + dependencies: + "@graphql-codegen/plugin-helpers": ^5.0.4 + "@graphql-codegen/schema-ast": ^4.0.2 + "@graphql-codegen/visitor-plugin-common": 5.3.1 + auto-bind: ~4.0.0 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 37a209ac6f1e84551805028dddb7be42e9b5ec5d7d411678b845f2c5b6b4bc242330666f993962f4d59dc207b9d1585c568f7c908364c0410531fd6860e4dfbd + languageName: node + linkType: hard + +"@graphql-codegen/visitor-plugin-common@npm:5.3.1, @graphql-codegen/visitor-plugin-common@npm:^5.3.1": + version: 5.3.1 + resolution: "@graphql-codegen/visitor-plugin-common@npm:5.3.1" + dependencies: + "@graphql-codegen/plugin-helpers": ^5.0.4 + "@graphql-tools/optimize": ^2.0.0 + "@graphql-tools/relay-operation-optimizer": ^7.0.0 + "@graphql-tools/utils": ^10.0.0 + auto-bind: ~4.0.0 + change-case-all: 1.0.15 + dependency-graph: ^0.11.0 + graphql-tag: ^2.11.0 + parse-filepath: ^1.0.2 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: c6d642445149ef9adb473e0a47019a2008e4e1b69a700d7ff6b2e4d2ba3f3118a4296f6d370fd1c45c84f91dd3580cea63db896a47bd102a0dd7b28bb409a0e6 + languageName: node + linkType: hard + +"@graphql-tools/apollo-engine-loader@npm:^8.0.0": + version: 8.0.1 + resolution: "@graphql-tools/apollo-engine-loader@npm:8.0.1" + dependencies: + "@ardatan/sync-fetch": ^0.0.1 + "@graphql-tools/utils": ^10.0.13 + "@whatwg-node/fetch": ^0.9.0 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 4ef280a8246d2b1ff2be1ad9334fe8d69147b0ed3a32a65f50057ddee27b44708bba8030f75c330e1615d428750ee276919e4ddd4ce16befa4e328f12226afc1 + languageName: node + linkType: hard + +"@graphql-tools/batch-execute@npm:^9.0.4": + version: 9.0.4 + resolution: "@graphql-tools/batch-execute@npm:9.0.4" + dependencies: + "@graphql-tools/utils": ^10.0.13 + dataloader: ^2.2.2 + tslib: ^2.4.0 + value-or-promise: ^1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: a15d96573d4b1c94795018e306095cbf00129a27fa038204f0709b11851b2b53acf9e75e023420dcaa0b505f953c98208e1d8fe6b18562fe5ade4660c475fe4e + languageName: node + linkType: hard + +"@graphql-tools/code-file-loader@npm:^8.0.0": + version: 8.1.3 + resolution: "@graphql-tools/code-file-loader@npm:8.1.3" + dependencies: + "@graphql-tools/graphql-tag-pluck": 8.3.2 + "@graphql-tools/utils": ^10.0.13 + globby: ^11.0.3 + tslib: ^2.4.0 + unixify: ^1.0.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: ce699c39a1dfdedc90609d3c5367dc074a786f0231df802c71ff0e83f9da929681149ecac5a3345bc792a65faca9a1173e0c0ca3c54af540f81a7ea98a8c1fb3 + languageName: node + linkType: hard + +"@graphql-tools/delegate@npm:^10.0.4": + version: 10.0.21 + resolution: "@graphql-tools/delegate@npm:10.0.21" + dependencies: + "@graphql-tools/batch-execute": ^9.0.4 + "@graphql-tools/executor": ^1.3.1 + "@graphql-tools/schema": ^10.0.4 + "@graphql-tools/utils": ^10.3.4 + "@repeaterjs/repeater": ^3.0.6 + dataloader: ^2.2.2 + tslib: ^2.5.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 2831f39c39402c5ee83193be51d71d5dfbdda3c5cbad4439f3f28b599f0690e554bf5812cfcd2c3de68b5d398828dfc2fab1319b85255275fd74edcf7c718cbc + languageName: node + linkType: hard + +"@graphql-tools/documents@npm:^1.0.0": + version: 1.0.1 + resolution: "@graphql-tools/documents@npm:1.0.1" + dependencies: + lodash.sortby: ^4.7.0 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: df24738f8ffd844a4727884f7825d7009456d7dcb24fa91169efdc061bb72a29527abeb2e23ccf9effed195104485fa286919c33452d8744cb659ad721f17586 + languageName: node + linkType: hard + +"@graphql-tools/executor-graphql-ws@npm:^1.1.2": + version: 1.2.0 + resolution: "@graphql-tools/executor-graphql-ws@npm:1.2.0" + dependencies: + "@graphql-tools/utils": ^10.3.0 + "@types/ws": ^8.0.0 + graphql-ws: ^5.14.0 + isomorphic-ws: ^5.0.0 + tslib: ^2.4.0 + ws: ^8.17.1 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 3faae1d0239d4d4ec7a000f946a8e82eead8028bcfe8599693cb4bfb85414e03b6bf5ba181360a7a2377274fc9e190aa30ce4a0ebcdfbe06539d5e1eb535d3da + languageName: node + linkType: hard + +"@graphql-tools/executor-http@npm:^1.0.9": + version: 1.1.6 + resolution: "@graphql-tools/executor-http@npm:1.1.6" + dependencies: + "@graphql-tools/utils": ^10.3.2 + "@repeaterjs/repeater": ^3.0.4 + "@whatwg-node/fetch": ^0.9.0 + extract-files: ^11.0.0 + meros: ^1.2.1 + tslib: ^2.4.0 + value-or-promise: ^1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 27000715f697e8540a30ac0df1be9d44ee5742ccab78ea3d1cb9f40b5896525f89ab8453e95cf826a810cb621e9bb18f4c63630719df454ad293a22ea0720120 + languageName: node + linkType: hard + +"@graphql-tools/executor-legacy-ws@npm:^1.0.6": + version: 1.1.0 + resolution: "@graphql-tools/executor-legacy-ws@npm:1.1.0" + dependencies: + "@graphql-tools/utils": ^10.3.0 + "@types/ws": ^8.0.0 + isomorphic-ws: ^5.0.0 + tslib: ^2.4.0 + ws: ^8.17.1 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 9aee70f9f3fafe3db16539c36abfefadddd9a674f093b6a455f7d4e8e404839969acfa41351a1d4d2258de7bc670b262d4a1628b8ec816420ee5882fcaa43c61 + languageName: node + linkType: hard + +"@graphql-tools/executor@npm:^1.3.1": + version: 1.3.1 + resolution: "@graphql-tools/executor@npm:1.3.1" + dependencies: + "@graphql-tools/utils": ^10.3.4 + "@graphql-typed-document-node/core": 3.2.0 + "@repeaterjs/repeater": ^3.0.4 + tslib: ^2.4.0 + value-or-promise: ^1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 91a0e43be277e034a37fd0200aae40ef5dc7fb982c44a0b7eb8e14d09f6e43996ccadad4ceafb4e1aa7dfcd6148e9972a94efff57a544eea9c3ca537a3804c3b + languageName: node + linkType: hard + +"@graphql-tools/git-loader@npm:^8.0.0": + version: 8.0.7 + resolution: "@graphql-tools/git-loader@npm:8.0.7" + dependencies: + "@graphql-tools/graphql-tag-pluck": 8.3.2 + "@graphql-tools/utils": ^10.0.13 + is-glob: 4.0.3 + micromatch: ^4.0.4 + tslib: ^2.4.0 + unixify: ^1.0.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 072852b4bca14541d64eead8bb2582781cc073fb80b3255501e348f2deb4f912d6ca3a07b46794f29f59b6b5fdde4ff5a362de1fbb780571eab37e7a0a63295f + languageName: node + linkType: hard + +"@graphql-tools/github-loader@npm:^8.0.0": + version: 8.0.1 + resolution: "@graphql-tools/github-loader@npm:8.0.1" + dependencies: + "@ardatan/sync-fetch": ^0.0.1 + "@graphql-tools/executor-http": ^1.0.9 + "@graphql-tools/graphql-tag-pluck": ^8.0.0 + "@graphql-tools/utils": ^10.0.13 + "@whatwg-node/fetch": ^0.9.0 + tslib: ^2.4.0 + value-or-promise: ^1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 83787b69d696e69c618993fa9fe73fec82daab849173a1b96a538c33c4988b14f506a4604712882c30f537d0aa81eabf21ce30effda369c7d1763d8f14adf711 + languageName: node + linkType: hard + +"@graphql-tools/graphql-file-loader@npm:^8.0.0": + version: 8.0.1 + resolution: "@graphql-tools/graphql-file-loader@npm:8.0.1" + dependencies: + "@graphql-tools/import": 7.0.1 + "@graphql-tools/utils": ^10.0.13 + globby: ^11.0.3 + tslib: ^2.4.0 + unixify: ^1.0.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: d27a9dc5329f16cdeeb9fd32f465da8ed0ef4127f10a9862f8b7096ccaaa33aa8d15c6269b2c27a8669531f95f4d9ac162e8b799434cbe4dabe02f4e6fd628a9 + languageName: node + linkType: hard + +"@graphql-tools/graphql-tag-pluck@npm:8.3.2, @graphql-tools/graphql-tag-pluck@npm:^8.0.0": + version: 8.3.2 + resolution: "@graphql-tools/graphql-tag-pluck@npm:8.3.2" + dependencies: + "@babel/core": ^7.22.9 + "@babel/parser": ^7.16.8 + "@babel/plugin-syntax-import-assertions": ^7.20.0 + "@babel/traverse": ^7.16.8 + "@babel/types": ^7.16.8 + "@graphql-tools/utils": ^10.0.13 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 0c351cdaeca3cc1de9308414108be7d760930dfe1e4dbbb6270edd6e449daae27b997ab6fc8a1086302d6712be07f80bbe2e5455a8e66063ea39b50165d38b8f + languageName: node + linkType: hard + +"@graphql-tools/import@npm:7.0.1": + version: 7.0.1 + resolution: "@graphql-tools/import@npm:7.0.1" + dependencies: + "@graphql-tools/utils": ^10.0.13 + resolve-from: 5.0.0 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 20d693874ceb1e4213f1d276786f87fe6b158125a103d9631f844b433aa0c2e0afd444b99393558ff88f5be7787e2d40f8c49739d1096e9312bc45ca6a4a5f51 + languageName: node + linkType: hard + +"@graphql-tools/json-file-loader@npm:^8.0.0": + version: 8.0.1 + resolution: "@graphql-tools/json-file-loader@npm:8.0.1" + dependencies: + "@graphql-tools/utils": ^10.0.13 + globby: ^11.0.3 + tslib: ^2.4.0 + unixify: ^1.0.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 690c7d58dd06c6c5109fa09820648c581cd4b1ca3842ec121d6ae44a324b1e1c16f32b662fb92a6699bcb9be676fe4fe2e9a9f50a6d4df7f3d991e9167115841 + languageName: node + linkType: hard + +"@graphql-tools/load@npm:^8.0.0": + version: 8.0.2 + resolution: "@graphql-tools/load@npm:8.0.2" + dependencies: + "@graphql-tools/schema": ^10.0.3 + "@graphql-tools/utils": ^10.0.13 + p-limit: 3.1.0 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 845535c3d47aba69feb29091f7c3829ea4684041e763c73929c670eaa0e8cf82e1981dac7e6fe30426e384fa81fd9de0ee62d3d2de0a4e92b3a5380d8af71063 + languageName: node + linkType: hard + "@graphql-tools/merge@npm:^9.0.0, @graphql-tools/merge@npm:^9.0.3": version: 9.0.4 resolution: "@graphql-tools/merge@npm:9.0.4" @@ -3472,6 +4535,68 @@ __metadata: languageName: node linkType: hard +"@graphql-tools/merge@npm:^9.0.6": + version: 9.0.7 + resolution: "@graphql-tools/merge@npm:9.0.7" + dependencies: + "@graphql-tools/utils": ^10.5.4 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: cd131180f99e38a7c5a7156f44aaa4d46ac7e73b0ce12ceb7165f227e89cf193ec28deeecbe77b2c825588bcbd869f952010a1d88d0cb19b794adbad2af02ccf + languageName: node + linkType: hard + +"@graphql-tools/optimize@npm:^2.0.0": + version: 2.0.0 + resolution: "@graphql-tools/optimize@npm:2.0.0" + dependencies: + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: db4ac0a2b0c89126ee7746e5615ae003d8665b684b17fb35956a7633fefb0e329a047f32a975cfbdf83f0f5ac4ae09fe469834fd71fdd49d8ed932fda79012fd + languageName: node + linkType: hard + +"@graphql-tools/prisma-loader@npm:^8.0.0": + version: 8.0.4 + resolution: "@graphql-tools/prisma-loader@npm:8.0.4" + dependencies: + "@graphql-tools/url-loader": ^8.0.2 + "@graphql-tools/utils": ^10.0.13 + "@types/js-yaml": ^4.0.0 + "@whatwg-node/fetch": ^0.9.0 + chalk: ^4.1.0 + debug: ^4.3.1 + dotenv: ^16.0.0 + graphql-request: ^6.0.0 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.0 + jose: ^5.0.0 + js-yaml: ^4.0.0 + lodash: ^4.17.20 + scuid: ^1.1.0 + tslib: ^2.4.0 + yaml-ast-parser: ^0.0.43 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 4a3fff758c92f254538748a0acd43643e63f84104aacff575da896e1e4ed92b89c62093281e1eb56bcb8ffb4a76a56124ba367a83f8d2a779d0ee29cf046ef16 + languageName: node + linkType: hard + +"@graphql-tools/relay-operation-optimizer@npm:^7.0.0": + version: 7.0.1 + resolution: "@graphql-tools/relay-operation-optimizer@npm:7.0.1" + dependencies: + "@ardatan/relay-compiler": 12.0.0 + "@graphql-tools/utils": ^10.0.13 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 4bb08c764b645fc602f8c45c518d576132dcd50e6ac35a70ae1dc6aff57521ad96be85ee72ea2cecc05d3d281fcbb47a976a7549034b0230deeae5de74cb24bc + languageName: node + linkType: hard + "@graphql-tools/schema@npm:^10.0.0": version: 10.0.3 resolution: "@graphql-tools/schema@npm:10.0.3" @@ -3486,6 +4611,57 @@ __metadata: languageName: node linkType: hard +"@graphql-tools/schema@npm:^10.0.3, @graphql-tools/schema@npm:^10.0.4": + version: 10.0.6 + resolution: "@graphql-tools/schema@npm:10.0.6" + dependencies: + "@graphql-tools/merge": ^9.0.6 + "@graphql-tools/utils": ^10.5.4 + tslib: ^2.4.0 + value-or-promise: ^1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 13df05c6696dd7ce63f1e773ad7be633db1c2a98eeff9d9695307f6588f3a987906eef01f68b74cafb0d2ee36aabe790bca67bda21662f1117d5fabac110ca3a + languageName: node + linkType: hard + +"@graphql-tools/url-loader@npm:^8.0.0, @graphql-tools/url-loader@npm:^8.0.2": + version: 8.0.2 + resolution: "@graphql-tools/url-loader@npm:8.0.2" + dependencies: + "@ardatan/sync-fetch": ^0.0.1 + "@graphql-tools/delegate": ^10.0.4 + "@graphql-tools/executor-graphql-ws": ^1.1.2 + "@graphql-tools/executor-http": ^1.0.9 + "@graphql-tools/executor-legacy-ws": ^1.0.6 + "@graphql-tools/utils": ^10.0.13 + "@graphql-tools/wrap": ^10.0.2 + "@types/ws": ^8.0.0 + "@whatwg-node/fetch": ^0.9.0 + isomorphic-ws: ^5.0.0 + tslib: ^2.4.0 + value-or-promise: ^1.0.11 + ws: ^8.12.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 7ae1084bb2218c0b085cfc6c70a6a488225e4154873495a768bbcc6f3b9537384eb5062400b784e3558645ee95384d5aa44a634d60246809bb3604f2ac4ffa84 + languageName: node + linkType: hard + +"@graphql-tools/utils@npm:^10.0.0, @graphql-tools/utils@npm:^10.1.1, @graphql-tools/utils@npm:^10.3.0, @graphql-tools/utils@npm:^10.3.2, @graphql-tools/utils@npm:^10.3.4, @graphql-tools/utils@npm:^10.5.4": + version: 10.5.4 + resolution: "@graphql-tools/utils@npm:10.5.4" + dependencies: + "@graphql-typed-document-node/core": ^3.1.1 + cross-inspect: 1.0.1 + dset: ^3.1.2 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 006d499d87eb5ee4680c43b6848de8a84e51c948d1ca18f98a062a405cf79472b14b93b97a77a1416d7e635f82e60583d432b3c0c2eaaf29eee322e18b8f651f + languageName: node + linkType: hard + "@graphql-tools/utils@npm:^10.0.13": version: 10.2.0 resolution: "@graphql-tools/utils@npm:10.2.0" @@ -3500,7 +4676,22 @@ __metadata: languageName: node linkType: hard -"@graphql-typed-document-node/core@npm:^3.1.1": +"@graphql-tools/wrap@npm:^10.0.2": + version: 10.0.5 + resolution: "@graphql-tools/wrap@npm:10.0.5" + dependencies: + "@graphql-tools/delegate": ^10.0.4 + "@graphql-tools/schema": ^10.0.3 + "@graphql-tools/utils": ^10.1.1 + tslib: ^2.4.0 + value-or-promise: ^1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 3987542491c352eab70bd0691fb5685fe09ea28ffdbb14b5daa83d27d2cc6a8ac443370ecc3771ab127803e2bf045c675b21bae05ee26b2cde5b6ba6fd18533f + languageName: node + linkType: hard + +"@graphql-typed-document-node/core@npm:3.2.0, @graphql-typed-document-node/core@npm:^3.1.1, @graphql-typed-document-node/core@npm:^3.2.0": version: 3.2.0 resolution: "@graphql-typed-document-node/core@npm:3.2.0" peerDependencies: @@ -4220,6 +5411,13 @@ __metadata: languageName: node linkType: hard +"@kamilkisiela/fast-url-parser@npm:^1.1.4": + version: 1.1.4 + resolution: "@kamilkisiela/fast-url-parser@npm:1.1.4" + checksum: 2c85202cb4924720ac812c8bc06967fd5df4db759a68aa3acc2962b8cf9e2b3bc131de863f00473c0b0602df13891b35140f667a87eea04c9b897b6c1ae89c4a + languageName: node + linkType: hard + "@ljharb/through@npm:^2.3.13": version: 2.3.13 resolution: "@ljharb/through@npm:2.3.13" @@ -4982,6 +6180,8 @@ __metadata: version: 0.0.0-use.local resolution: "@medusajs/modules-sdk@workspace:packages/core/modules-sdk" dependencies: + "@graphql-codegen/cli": ^5.0.2 + "@graphql-codegen/typescript": ^4.0.9 "@graphql-tools/merge": ^9.0.0 "@graphql-tools/schema": ^10.0.0 "@medusajs/orchestration": ^0.5.7 @@ -5354,6 +6554,7 @@ __metadata: awilix: ^8.0.1 bignumber.js: ^9.1.2 cross-env: ^5.2.1 + expect-type: ^0.20.0 ioredis: ^5.4.1 rimraf: ^5.0.1 typescript: ^5.1.6 @@ -6035,6 +7236,39 @@ __metadata: languageName: node linkType: hard +"@peculiar/asn1-schema@npm:^2.3.8": + version: 2.3.13 + resolution: "@peculiar/asn1-schema@npm:2.3.13" + dependencies: + asn1js: ^3.0.5 + pvtsutils: ^1.3.5 + tslib: ^2.6.2 + checksum: 98020f09a1b412e16bd5cb96ecb35a4da8043d90f4911eaa8b565cba7c437ae39544f928f8c112d5926f260bff78a184c165f60f153409c94b5224527ea355b0 + languageName: node + linkType: hard + +"@peculiar/json-schema@npm:^1.1.12": + version: 1.1.12 + resolution: "@peculiar/json-schema@npm:1.1.12" + dependencies: + tslib: ^2.0.0 + checksum: 202132c66dcc6b6aca5d0af971c015be2e163da2f7f992910783c5d39c8a7db59b6ec4f4ce419459a1f954b7e1d17b6b253f0e60072c1b3d254079f4eaebc311 + languageName: node + linkType: hard + +"@peculiar/webcrypto@npm:^1.4.0": + version: 1.5.0 + resolution: "@peculiar/webcrypto@npm:1.5.0" + dependencies: + "@peculiar/asn1-schema": ^2.3.8 + "@peculiar/json-schema": ^1.1.12 + pvtsutils: ^1.3.5 + tslib: ^2.6.2 + webcrypto-core: ^1.8.0 + checksum: 4f6f24b2c52c2155b9c569b6eb1d57954cb5f7bd2764a50cdaed7aea17a6dcf304b75b87b57ba318756ffec8179a07d9a76534aaf77855912b838543e5ff8983 + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -9164,6 +10398,13 @@ __metadata: languageName: node linkType: hard +"@repeaterjs/repeater@npm:^3.0.4, @repeaterjs/repeater@npm:^3.0.6": + version: 3.0.6 + resolution: "@repeaterjs/repeater@npm:3.0.6" + checksum: c3915e2603927c7d6a9eb09673bc28fc49ab3a86947ec191a74663b33deebee2fcc4b03c31cc663ff27bd6db9e6c9487639b6935e265d601ce71b8c497f5f4a8 + languageName: node + linkType: hard + "@rollup/plugin-alias@npm:^3.1.1": version: 3.1.9 resolution: "@rollup/plugin-alias@npm:3.1.9" @@ -12035,7 +13276,7 @@ __metadata: languageName: node linkType: hard -"@types/js-yaml@npm:^4.0.9": +"@types/js-yaml@npm:^4.0.0, @types/js-yaml@npm:^4.0.9": version: 4.0.9 resolution: "@types/js-yaml@npm:4.0.9" checksum: 24de857aa8d61526bbfbbaa383aa538283ad17363fcd5bb5148e2c7f604547db36646440e739d78241ed008702a8920665d1add5618687b6743858fae00da211 @@ -12503,6 +13744,15 @@ __metadata: languageName: node linkType: hard +"@types/ws@npm:^8.0.0": + version: 8.5.12 + resolution: "@types/ws@npm:8.5.12" + dependencies: + "@types/node": "*" + checksum: 3fd77c9e4e05c24ce42bfc7647f7506b08c40a40fe2aea236ef6d4e96fc7cb4006a81ed1b28ec9c457e177a74a72924f4768b7b4652680b42dfd52bc380e15f9 + languageName: node + linkType: hard + "@types/yargs-parser@npm:*": version: 21.0.3 resolution: "@types/yargs-parser@npm:21.0.3" @@ -12922,6 +14172,61 @@ __metadata: languageName: node linkType: hard +"@whatwg-node/events@npm:^0.0.3": + version: 0.0.3 + resolution: "@whatwg-node/events@npm:0.0.3" + checksum: 87ac0854f84650ce016ccd82a6c087eac1c6204eeb80cf358737ce7757a345e3a4ba19e9b1815b326eb1451d49878785aa9dc426631f4ea47dedbcfc51b56977 + languageName: node + linkType: hard + +"@whatwg-node/fetch@npm:^0.8.0": + version: 0.8.8 + resolution: "@whatwg-node/fetch@npm:0.8.8" + dependencies: + "@peculiar/webcrypto": ^1.4.0 + "@whatwg-node/node-fetch": ^0.3.6 + busboy: ^1.6.0 + urlpattern-polyfill: ^8.0.0 + web-streams-polyfill: ^3.2.1 + checksum: 37d882bf85764aec7541cda1008099ab4d695971608946ec9b9e40326eedfd4c49507fbcc8765ebe3e9241f4dc9d1e970e0b3501a814d721c40c721d313c5d50 + languageName: node + linkType: hard + +"@whatwg-node/fetch@npm:^0.9.0": + version: 0.9.21 + resolution: "@whatwg-node/fetch@npm:0.9.21" + dependencies: + "@whatwg-node/node-fetch": ^0.5.23 + urlpattern-polyfill: ^10.0.0 + checksum: c0727e32673fa0596aff9786995b308fc92c33290807c72333af2a5c7a7e38ca6e236ec641bb4caded25e30127bee4b9df2e15d47c064970c2f7df58b084ca8d + languageName: node + linkType: hard + +"@whatwg-node/node-fetch@npm:^0.3.6": + version: 0.3.6 + resolution: "@whatwg-node/node-fetch@npm:0.3.6" + dependencies: + "@whatwg-node/events": ^0.0.3 + busboy: ^1.6.0 + fast-querystring: ^1.1.1 + fast-url-parser: ^1.1.3 + tslib: ^2.3.1 + checksum: 49e4fd5e682d1fa1229b2c13c06074c6a633eddbe61be162fd213ddb85d6d27d51554b3cced5f6b7f3be1722a64cca7f5ffe0722d08b3285fe2f289d8d5a045d + languageName: node + linkType: hard + +"@whatwg-node/node-fetch@npm:^0.5.23": + version: 0.5.26 + resolution: "@whatwg-node/node-fetch@npm:0.5.26" + dependencies: + "@kamilkisiela/fast-url-parser": ^1.1.4 + busboy: ^1.6.0 + fast-querystring: ^1.1.1 + tslib: ^2.6.3 + checksum: 32e7b230e7d1ead507f44b49dfb91bacdef2c89cf7a10b95f2b996e15786fcbfc8dc4b21ef8b56e2fd39bd8491f8a01b216b33d7e30af8291778777811de325e + languageName: node + linkType: hard + "@yarnpkg/esbuild-plugin-pnp@npm:^3.0.0-rc.10": version: 3.0.0-rc.15 resolution: "@yarnpkg/esbuild-plugin-pnp@npm:3.0.0-rc.15" @@ -13561,6 +14866,13 @@ __metadata: languageName: node linkType: hard +"asap@npm:~2.0.3": + version: 2.0.6 + resolution: "asap@npm:2.0.6" + checksum: c6d5e39fe1f15e4b87677460bd66b66050cd14c772269cee6688824c1410a08ab20254bb6784f9afb75af9144a9f9a7692d49547f4d19d715aeb7c0318f3136d + languageName: node + linkType: hard + "asn1@npm:~0.2.3": version: 0.2.6 resolution: "asn1@npm:0.2.6" @@ -13570,6 +14882,17 @@ __metadata: languageName: node linkType: hard +"asn1js@npm:^3.0.1, asn1js@npm:^3.0.5": + version: 3.0.5 + resolution: "asn1js@npm:3.0.5" + dependencies: + pvtsutils: ^1.3.2 + pvutils: ^1.1.3 + tslib: ^2.4.0 + checksum: bb8eaf4040c8f49dd475566874986f5976b81bae65a6b5526e2208a13cdca323e69ce297bcd435fdda3eb6933defe888e71974d705b6fcb14f2734a907f8aed4 + languageName: node + linkType: hard + "assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": version: 1.0.0 resolution: "assert-plus@npm:1.0.0" @@ -13662,6 +14985,13 @@ __metadata: languageName: node linkType: hard +"auto-bind@npm:~4.0.0": + version: 4.0.0 + resolution: "auto-bind@npm:4.0.0" + checksum: 12f70745d081ba990dca028ecfa70de25d4baa9a8b74a5bef3ab293da56cba32ff8276c3ff8e5fe6d9f370547bf3fa71486befbfefe272af7e722c21d0c25530 + languageName: node + linkType: hard + "autoprefixer@npm:^10.1.0, autoprefixer@npm:^10.4.16, autoprefixer@npm:^10.4.17, autoprefixer@npm:^10.4.19": version: 10.4.19 resolution: "autoprefixer@npm:10.4.19" @@ -13862,6 +15192,13 @@ __metadata: languageName: node linkType: hard +"babel-plugin-syntax-trailing-function-commas@npm:^7.0.0-beta.0": + version: 7.0.0-beta.0 + resolution: "babel-plugin-syntax-trailing-function-commas@npm:7.0.0-beta.0" + checksum: 67e3d6a706637097526b2d3046d3124d3efd3aac28b47af940c2f8df01b8d7ffeb4cdf5648f3b5eac3f098f5b61c4845e306f34301c869e5e14db6ae8b77f699 + languageName: node + linkType: hard + "babel-plugin-transform-async-to-promises@npm:^0.8.15": version: 0.8.18 resolution: "babel-plugin-transform-async-to-promises@npm:0.8.18" @@ -13902,6 +15239,43 @@ __metadata: languageName: node linkType: hard +"babel-preset-fbjs@npm:^3.4.0": + version: 3.4.0 + resolution: "babel-preset-fbjs@npm:3.4.0" + dependencies: + "@babel/plugin-proposal-class-properties": ^7.0.0 + "@babel/plugin-proposal-object-rest-spread": ^7.0.0 + "@babel/plugin-syntax-class-properties": ^7.0.0 + "@babel/plugin-syntax-flow": ^7.0.0 + "@babel/plugin-syntax-jsx": ^7.0.0 + "@babel/plugin-syntax-object-rest-spread": ^7.0.0 + "@babel/plugin-transform-arrow-functions": ^7.0.0 + "@babel/plugin-transform-block-scoped-functions": ^7.0.0 + "@babel/plugin-transform-block-scoping": ^7.0.0 + "@babel/plugin-transform-classes": ^7.0.0 + "@babel/plugin-transform-computed-properties": ^7.0.0 + "@babel/plugin-transform-destructuring": ^7.0.0 + "@babel/plugin-transform-flow-strip-types": ^7.0.0 + "@babel/plugin-transform-for-of": ^7.0.0 + "@babel/plugin-transform-function-name": ^7.0.0 + "@babel/plugin-transform-literals": ^7.0.0 + "@babel/plugin-transform-member-expression-literals": ^7.0.0 + "@babel/plugin-transform-modules-commonjs": ^7.0.0 + "@babel/plugin-transform-object-super": ^7.0.0 + "@babel/plugin-transform-parameters": ^7.0.0 + "@babel/plugin-transform-property-literals": ^7.0.0 + "@babel/plugin-transform-react-display-name": ^7.0.0 + "@babel/plugin-transform-react-jsx": ^7.0.0 + "@babel/plugin-transform-shorthand-properties": ^7.0.0 + "@babel/plugin-transform-spread": ^7.0.0 + "@babel/plugin-transform-template-literals": ^7.0.0 + babel-plugin-syntax-trailing-function-commas: ^7.0.0-beta.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 2be440c0fd7d1df247417be35644cb89f40a300e7fcdc44878b737ec49b04380eff422e4ebdc7bb5efd5ecfef45b634fc5fe11c3a409a50c9084e81083037902 + languageName: node + linkType: hard + "babel-preset-jest@npm:^29.6.3": version: 29.6.3 resolution: "babel-preset-jest@npm:29.6.3" @@ -14199,6 +15573,20 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.23.1": + version: 4.23.3 + resolution: "browserslist@npm:4.23.3" + dependencies: + caniuse-lite: ^1.0.30001646 + electron-to-chromium: ^1.5.4 + node-releases: ^2.0.18 + update-browserslist-db: ^1.1.0 + bin: + browserslist: cli.js + checksum: 3063bfdf812815346447f4796c8f04601bf5d62003374305fd323c2a463e42776475bcc5309264e39bcf9a8605851e53560695991a623be988138b3ff8c66642 + languageName: node + linkType: hard + "bs-logger@npm:0.x": version: 0.2.6 resolution: "bs-logger@npm:0.2.6" @@ -14330,7 +15718,7 @@ __metadata: languageName: node linkType: hard -"busboy@npm:^1.0.0": +"busboy@npm:^1.0.0, busboy@npm:^1.6.0": version: 1.6.0 resolution: "busboy@npm:1.6.0" dependencies: @@ -14504,6 +15892,24 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001646": + version: 1.0.30001657 + resolution: "caniuse-lite@npm:1.0.30001657" + checksum: bf40189e41d0ae9bad59c8b4054ecda3a8603754ad85fc04999679a92e2bca506350573342c9397c14a8b877a50210a37e744d8fc06adf38d1af33686d41db69 + languageName: node + linkType: hard + +"capital-case@npm:^1.0.4": + version: 1.0.4 + resolution: "capital-case@npm:1.0.4" + dependencies: + no-case: ^3.0.4 + tslib: ^2.0.3 + upper-case-first: ^2.0.2 + checksum: 6a034af73401f6e55d91ea35c190bbf8bda21714d4ea8bb8f1799311d123410a80f0875db4e3236dc3f97d74231ff4bf1c8783f2be13d7733c7d990c57387281 + languageName: node + linkType: hard + "cardinal@npm:^2.1.1": version: 2.1.1 resolution: "cardinal@npm:2.1.1" @@ -14589,6 +15995,44 @@ __metadata: languageName: node linkType: hard +"change-case-all@npm:1.0.15": + version: 1.0.15 + resolution: "change-case-all@npm:1.0.15" + dependencies: + change-case: ^4.1.2 + is-lower-case: ^2.0.2 + is-upper-case: ^2.0.2 + lower-case: ^2.0.2 + lower-case-first: ^2.0.2 + sponge-case: ^1.0.1 + swap-case: ^2.0.2 + title-case: ^3.0.3 + upper-case: ^2.0.2 + upper-case-first: ^2.0.2 + checksum: 0de81690de866aa8c477f8b5b08c6f9dbce4a078cffa5f014858f49fda548a9a6524b61f62f2940acce9f1fdcfeef3a7124090684e86e731f55d26c22713e2d7 + languageName: node + linkType: hard + +"change-case@npm:^4.1.2": + version: 4.1.2 + resolution: "change-case@npm:4.1.2" + dependencies: + camel-case: ^4.1.2 + capital-case: ^1.0.4 + constant-case: ^3.0.4 + dot-case: ^3.0.4 + header-case: ^2.0.4 + no-case: ^3.0.4 + param-case: ^3.0.4 + pascal-case: ^3.1.2 + path-case: ^3.0.4 + sentence-case: ^3.0.4 + snake-case: ^3.0.4 + tslib: ^2.0.3 + checksum: 95a6e48563cd393241ce18470c7310a8a050304a64b63addac487560ab039ce42b099673d1d293cc10652324d92060de11b5d918179fe3b5af2ee521fb03ca58 + languageName: node + linkType: hard + "char-regex@npm:^1.0.2": version: 1.0.2 resolution: "char-regex@npm:1.0.2" @@ -15139,6 +16583,13 @@ __metadata: languageName: node linkType: hard +"common-tags@npm:1.8.2": + version: 1.8.2 + resolution: "common-tags@npm:1.8.2" + checksum: 23efe47ff0a1a7c91489271b3a1e1d2a171c12ec7f9b35b29b2fce51270124aff0ec890087e2bc2182c1cb746e232ab7561aaafe05f1e7452aea733d2bfe3f63 + languageName: node + linkType: hard + "commondir@npm:^1.0.1": version: 1.0.1 resolution: "commondir@npm:1.0.1" @@ -15264,6 +16715,17 @@ __metadata: languageName: node linkType: hard +"constant-case@npm:^3.0.4": + version: 3.0.4 + resolution: "constant-case@npm:3.0.4" + dependencies: + no-case: ^3.0.4 + tslib: ^2.0.3 + upper-case: ^2.0.2 + checksum: 91d54f18341fcc491ae66d1086642b0cc564be3e08984d7b7042f8b0a721c8115922f7f11d6a09f13ed96ff326eabae11f9d1eb0335fa9d8b6e39e4df096010e + languageName: node + linkType: hard + "content-disposition@npm:0.5.3": version: 0.5.3 resolution: "content-disposition@npm:0.5.3" @@ -15469,6 +16931,23 @@ __metadata: languageName: node linkType: hard +"cosmiconfig@npm:^9.0.0": + version: 9.0.0 + resolution: "cosmiconfig@npm:9.0.0" + dependencies: + env-paths: ^2.2.1 + import-fresh: ^3.3.0 + js-yaml: ^4.1.0 + parse-json: ^5.2.0 + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: 1c1703be4f02a250b1d6ca3267e408ce16abfe8364193891afc94c2d5c060b69611fdc8d97af74b7e6d5d1aac0ab2fb94d6b079573146bc2d756c2484ce5f0ee + languageName: node + linkType: hard + "create-jest@npm:^29.7.0": version: 29.7.0 resolution: "create-jest@npm:29.7.0" @@ -15582,6 +17061,15 @@ __metadata: languageName: node linkType: hard +"cross-fetch@npm:^3.1.5": + version: 3.1.8 + resolution: "cross-fetch@npm:3.1.8" + dependencies: + node-fetch: ^2.6.12 + checksum: 4c5e022ffe6abdf380faa6e2373c0c4ed7ef75e105c95c972b6f627c3f083170b6886f19fb488a7fa93971f4f69dcc890f122b0d97f0bf5f41ca1d9a8f58c8af + languageName: node + linkType: hard + "cross-inspect@npm:1.0.0": version: 1.0.0 resolution: "cross-inspect@npm:1.0.0" @@ -15591,6 +17079,15 @@ __metadata: languageName: node linkType: hard +"cross-inspect@npm:1.0.1": + version: 1.0.1 + resolution: "cross-inspect@npm:1.0.1" + dependencies: + tslib: ^2.4.0 + checksum: 2493ee47a801b46ede1c42ca6242b8d2059f7319b5baf23887bbaf46a6ea8e536d2e271d0990176c05092f67b32d084ffd8c93e7c1227eff4a06cceadb49af47 + languageName: node + linkType: hard + "cross-spawn@npm:^5.1.0": version: 5.1.0 resolution: "cross-spawn@npm:5.1.0" @@ -16049,6 +17546,13 @@ __metadata: languageName: node linkType: hard +"dataloader@npm:^2.2.2": + version: 2.2.2 + resolution: "dataloader@npm:2.2.2" + checksum: 125ec69f821478cf7c6b4360095db6cab939fe57876a0d2060c428091a8deee7152345189923b71a6afa694aaec463779f34b585317164016fd6f54f52cd94ba + languageName: node + linkType: hard + "date-fns@npm:^3.6.0": version: 3.6.0 resolution: "date-fns@npm:3.6.0" @@ -16063,6 +17567,13 @@ __metadata: languageName: node linkType: hard +"debounce@npm:^1.2.0": + version: 1.2.1 + resolution: "debounce@npm:1.2.1" + checksum: 6c9320aa0973fc42050814621a7a8a78146c1975799b5b3cc1becf1f77ba9a5aa583987884230da0842a03f385def452fad5d60db97c3d1c8b824e38a8edf500 + languageName: node + linkType: hard + "debug@npm:2.6.9, debug@npm:^2.6.9": version: 2.6.9 resolution: "debug@npm:2.6.9" @@ -16336,6 +17847,13 @@ __metadata: languageName: node linkType: hard +"dependency-graph@npm:^0.11.0": + version: 0.11.0 + resolution: "dependency-graph@npm:0.11.0" + checksum: 9e6968d1534fdb502f7f3a25a3819b499f9d60f8389193950ed0b4d1618f1341b36b5d039f2cee256cfe10c9e8198ace16b271e370df06a93fac206e81602e7c + languageName: node + linkType: hard + "dequal@npm:^2.0.2, dequal@npm:^2.0.3": version: 2.0.3 resolution: "dequal@npm:2.0.3" @@ -16736,6 +18254,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.5.4": + version: 1.5.14 + resolution: "electron-to-chromium@npm:1.5.14" + checksum: 2a77cd7486347a5d304f31de46b874e3deabc0b665bea91dbe8bf3b52aba59059115a10e5d0edcbd33c1450065a2f7b28b07a2cf1a7de92fefbf443730d69131 + languageName: node + linkType: hard + "emittery@npm:^0.13.0, emittery@npm:^0.13.1": version: 0.13.1 resolution: "emittery@npm:0.13.1" @@ -16839,7 +18364,7 @@ __metadata: languageName: node linkType: hard -"env-paths@npm:^2.2.0": +"env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": version: 2.2.1 resolution: "env-paths@npm:2.2.1" checksum: 285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 @@ -17900,6 +19425,13 @@ __metadata: languageName: node linkType: hard +"expect-type@npm:^0.20.0": + version: 0.20.0 + resolution: "expect-type@npm:0.20.0" + checksum: 66650a51072340ca66a427abe3c86b3cb8f0e2d4873dacf22a2cb0b1398e92c85d92ddef8d6e6ee93863f24fbd704c7c89949718621ee562954c4f20607c47db + languageName: node + linkType: hard + "expect@npm:^29.0.0, expect@npm:^29.7.0": version: 29.7.0 resolution: "expect@npm:29.7.0" @@ -18038,6 +19570,13 @@ __metadata: languageName: node linkType: hard +"extract-files@npm:^11.0.0": + version: 11.0.0 + resolution: "extract-files@npm:11.0.0" + checksum: 7ac1cd693d081099d7c29f2b36aad199f92c5ea234c2016eb37ba213dddaefe74d54566f0675de5917d35cf98670183c2c9a0d96094727eb2c6dae02be7fc308 + languageName: node + linkType: hard + "extract-stack@npm:^2.0.0": version: 2.0.0 resolution: "extract-stack@npm:2.0.0" @@ -18080,6 +19619,13 @@ __metadata: languageName: node linkType: hard +"fast-decode-uri-component@npm:^1.0.1": + version: 1.0.1 + resolution: "fast-decode-uri-component@npm:1.0.1" + checksum: 039d50c2e99d64f999c3f2126c23fbf75a04a4117e218a149ca0b1d2aeb8c834b7b19d643b9d35d4eabce357189a6a94085f78cf48869e6e26cc59b036284bc3 + languageName: node + linkType: hard + "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -18121,6 +19667,15 @@ __metadata: languageName: node linkType: hard +"fast-querystring@npm:^1.1.1": + version: 1.1.2 + resolution: "fast-querystring@npm:1.1.2" + dependencies: + fast-decode-uri-component: ^1.0.1 + checksum: e8223273a9b199722f760f5a047a77ad049a14bd444b821502cb8218f5925e3a5fffb56b64389bca73ab2ac6f1aa7aebbe4e203e5f6e53ff5978de97c0fde4e3 + languageName: node + linkType: hard + "fast-safe-stringify@npm:^2.0.7": version: 2.1.1 resolution: "fast-safe-stringify@npm:2.1.1" @@ -18128,6 +19683,15 @@ __metadata: languageName: node linkType: hard +"fast-url-parser@npm:^1.1.3": + version: 1.1.3 + resolution: "fast-url-parser@npm:1.1.3" + dependencies: + punycode: ^1.3.2 + checksum: d85c5c409cf0215417380f98a2d29c23a95004d93ff0d8bdf1af5f1a9d1fc608ac89ac6ffe863783d2c73efb3850dd35390feb1de3296f49877bfee0392eb5d3 + languageName: node + linkType: hard + "fast-xml-parser@npm:4.2.5": version: 4.2.5 resolution: "fast-xml-parser@npm:4.2.5" @@ -18157,6 +19721,28 @@ __metadata: languageName: node linkType: hard +"fbjs-css-vars@npm:^1.0.0": + version: 1.0.2 + resolution: "fbjs-css-vars@npm:1.0.2" + checksum: dfb64116b125a64abecca9e31477b5edb9a2332c5ffe74326fe36e0a72eef7fc8a49b86adf36c2c293078d79f4524f35e80f5e62546395f53fb7c9e69821f54f + languageName: node + linkType: hard + +"fbjs@npm:^3.0.0": + version: 3.0.5 + resolution: "fbjs@npm:3.0.5" + dependencies: + cross-fetch: ^3.1.5 + fbjs-css-vars: ^1.0.0 + loose-envify: ^1.0.0 + object-assign: ^4.1.0 + promise: ^7.1.1 + setimmediate: ^1.0.5 + ua-parser-js: ^1.0.35 + checksum: 66d0a2fc9a774f9066e35ac2ac4bf1245931d27f3ac287c7d47e6aa1fc152b243c2109743eb8f65341e025621fb51a12038fadb9fd8fda2e3ddae04ebab06f91 + languageName: node + linkType: hard + "fd-slicer@npm:~1.1.0": version: 1.1.0 resolution: "fd-slicer@npm:1.1.0" @@ -18950,7 +20536,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.0.5, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.2.0, glob@npm:~7.2.0": +"glob@npm:^7.0.5, glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.2.0, glob@npm:~7.2.0": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -19090,6 +20676,63 @@ __metadata: languageName: node linkType: hard +"graphql-config@npm:^5.0.2": + version: 5.1.2 + resolution: "graphql-config@npm:5.1.2" + dependencies: + "@graphql-tools/graphql-file-loader": ^8.0.0 + "@graphql-tools/json-file-loader": ^8.0.0 + "@graphql-tools/load": ^8.0.0 + "@graphql-tools/merge": ^9.0.0 + "@graphql-tools/url-loader": ^8.0.0 + "@graphql-tools/utils": ^10.0.0 + cosmiconfig: ^9.0.0 + jiti: ^1.18.2 + minimatch: ^9.0.5 + string-env-interpolation: ^1.0.1 + tslib: ^2.4.0 + peerDependencies: + cosmiconfig-toml-loader: ^1.0.0 + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + cosmiconfig-toml-loader: + optional: true + checksum: 9f61bba544d7de757e4572445bdc55bd0d1be01bf3def06833834a7ae070cb8fc3b83f2ab7f47f4fd9f4855f18a2f9528124e0a4c6630c72e1ff012a2cc85154 + languageName: node + linkType: hard + +"graphql-request@npm:^6.0.0": + version: 6.1.0 + resolution: "graphql-request@npm:6.1.0" + dependencies: + "@graphql-typed-document-node/core": ^3.2.0 + cross-fetch: ^3.1.5 + peerDependencies: + graphql: 14 - 16 + checksum: f8167925a110e8e1de93d56c14245e7e64391dc8dce5002dd01bf24a3059f345d4ca1bb6ce2040e2ec78264211b0704e75da3e63984f0f74d2042f697a4e8cc6 + languageName: node + linkType: hard + +"graphql-tag@npm:^2.11.0": + version: 2.12.6 + resolution: "graphql-tag@npm:2.12.6" + dependencies: + tslib: ^2.1.0 + peerDependencies: + graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 7763a72011bda454ed8ff1a0d82325f43ca6478e4ce4ab8b7910c4c651dd00db553132171c04d80af5d5aebf1ef6a8a9fd53ccfa33b90ddc00aa3d4be6114419 + languageName: node + linkType: hard + +"graphql-ws@npm:^5.14.0": + version: 5.16.0 + resolution: "graphql-ws@npm:5.16.0" + peerDependencies: + graphql: ">=0.11 <=16" + checksum: 5e538c3460ca997a1634bd0f64236d8d7aa6ac75c58aba549b49953faf0dd2497f4fa43eedb0bc82cfff50426c7ce47682a670d2571fd7f3af5dcf00911c9e1b + languageName: node + linkType: hard + "graphql@npm:^16.6.0, graphql@npm:^16.8.1": version: 16.8.1 resolution: "graphql@npm:16.8.1" @@ -19272,6 +20915,16 @@ __metadata: languageName: node linkType: hard +"header-case@npm:^2.0.4": + version: 2.0.4 + resolution: "header-case@npm:2.0.4" + dependencies: + capital-case: ^1.0.4 + tslib: ^2.0.3 + checksum: c9f295d9d8e38fa50679281fd70d80726962256e888a76c8e72e526453da7a1832dcb427caa716c1ad5d79841d4537301b90156fa30298fefd3d68f4ea2181bb + languageName: node + linkType: hard + "headers-polyfill@npm:^4.0.2": version: 4.0.3 resolution: "headers-polyfill@npm:4.0.3" @@ -19478,6 +21131,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^7.0.0": + version: 7.0.5 + resolution: "https-proxy-agent@npm:7.0.5" + dependencies: + agent-base: ^7.0.2 + debug: 4 + checksum: 2490e3acec397abeb88807db52cac59102d5ed758feee6df6112ab3ccd8325e8a1ce8bce6f4b66e5470eca102d31e425ace904242e4fa28dbe0c59c4bafa7b2c + languageName: node + linkType: hard + "https-proxy-agent@npm:^7.0.1": version: 7.0.4 resolution: "https-proxy-agent@npm:7.0.4" @@ -19642,6 +21305,13 @@ __metadata: languageName: node linkType: hard +"immutable@npm:~3.7.6": + version: 3.7.6 + resolution: "immutable@npm:3.7.6" + checksum: efe2bbb2620aa897afbb79545b9eda4dd3dc072e05ae7004895a7efb43187e4265612a88f8723f391eb1c87c46c52fd11e2d1968e42404450c63e49558d7ca4e + languageName: node + linkType: hard + "import-cwd@npm:^3.0.0": version: 3.0.0 resolution: "import-cwd@npm:3.0.0" @@ -19661,6 +21331,13 @@ __metadata: languageName: node linkType: hard +"import-from@npm:4.0.0": + version: 4.0.0 + resolution: "import-from@npm:4.0.0" + checksum: 7fd98650d555e418c18341fef49ae11afc833f5ae70b7043e99684187cba6ac6b52e4118a491bd9f856045495bef5bdda7321095e65bcb2ef70ce2adf9f0d8d1 + languageName: node + linkType: hard + "import-from@npm:^3.0.0": version: 3.0.0 resolution: "import-from@npm:3.0.0" @@ -20188,6 +21865,15 @@ __metadata: languageName: node linkType: hard +"is-glob@npm:4.0.3, is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: ^2.1.1 + checksum: 17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + "is-glob@npm:^2.0.0": version: 2.0.1 resolution: "is-glob@npm:2.0.1" @@ -20197,15 +21883,6 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: ^2.1.1 - checksum: 17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a - languageName: node - linkType: hard - "is-gzip@npm:^1.0.0": version: 1.0.0 resolution: "is-gzip@npm:1.0.0" @@ -20254,6 +21931,15 @@ __metadata: languageName: node linkType: hard +"is-lower-case@npm:^2.0.2": + version: 2.0.2 + resolution: "is-lower-case@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: c045e6a52dcc7c3857e2f8c850ded604cdc5269ff94625b03881cefc73bfc02f5099a1bc9bafa67793656711a40d4ab3e26e285a848e728506df20ead0ce8e2f + languageName: node + linkType: hard + "is-map@npm:^2.0.2, is-map@npm:^2.0.3": version: 2.0.3 resolution: "is-map@npm:2.0.3" @@ -20518,6 +22204,15 @@ __metadata: languageName: node linkType: hard +"is-upper-case@npm:^2.0.2": + version: 2.0.2 + resolution: "is-upper-case@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: 2236f416484a2643d55a07cc95443cecf96cbc5fb0de7f24c506a8bc5cc4c4de885ab56c5ec946eadd95b3b7960bff7ed51cc88511fa8e8a9d92f2f8969622d9 + languageName: node + linkType: hard + "is-valid-path@npm:^0.1.1": version: 0.1.1 resolution: "is-valid-path@npm:0.1.1" @@ -20618,6 +22313,15 @@ __metadata: languageName: node linkType: hard +"isomorphic-ws@npm:^5.0.0": + version: 5.0.0 + resolution: "isomorphic-ws@npm:5.0.0" + peerDependencies: + ws: "*" + checksum: a058ac8b5e6efe9e46252cb0bc67fd325005d7216451d1a51238bc62d7da8486f828ef017df54ddf742e0fffcbe4b1bcc2a66cc115b027ed0180334cd18df252 + languageName: node + linkType: hard + "isstream@npm:~0.1.2": version: 0.1.2 resolution: "isstream@npm:0.1.2" @@ -21228,6 +22932,15 @@ __metadata: languageName: node linkType: hard +"jiti@npm:^1.17.1, jiti@npm:^1.18.2": + version: 1.21.6 + resolution: "jiti@npm:1.21.6" + bin: + jiti: bin/jiti.js + checksum: 05b9ed58cd30d0c3ccd3c98209339e74f50abd9a17e716f65db46b6a35812103f6bde6e134be7124d01745586bca8cc5dae1d0d952267c3ebe55171949c32e56 + languageName: node + linkType: hard + "jiti@npm:^1.20.0, jiti@npm:^1.21.0": version: 1.21.0 resolution: "jiti@npm:1.21.0" @@ -21257,6 +22970,13 @@ __metadata: languageName: node linkType: hard +"jose@npm:^5.0.0": + version: 5.8.0 + resolution: "jose@npm:5.8.0" + checksum: f4dba1bbc41c46ae549840c3f99db07e72c1a191dffeef46bbd81c5fdc01827bb4be4d9f3e77d37887ffb56c57bd276e5fde314e6e790db19809008e47004c48 + languageName: node + linkType: hard + "joycon@npm:^3.0.1, joycon@npm:^3.1.1": version: 3.1.1 resolution: "joycon@npm:3.1.1" @@ -21290,7 +23010,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^4.1.0": +"js-yaml@npm:^4.0.0, js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" dependencies: @@ -21560,6 +23280,16 @@ __metadata: languageName: node linkType: hard +"json-to-pretty-yaml@npm:^1.2.2": + version: 1.2.2 + resolution: "json-to-pretty-yaml@npm:1.2.2" + dependencies: + remedial: ^1.0.7 + remove-trailing-spaces: ^1.0.6 + checksum: d28891860a7ae034873ac8ec5f69f5493106afed9a86295f1642a40b27a48df717c63966439a1dec5b8a4b30e99b86cd1b4ca7d979bb8048ffd7f7c67bfd88a3 + languageName: node + linkType: hard + "json5@npm:^2.1.2, json5@npm:^2.2.2, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" @@ -22014,6 +23744,27 @@ __metadata: languageName: node linkType: hard +"listr2@npm:^4.0.5": + version: 4.0.5 + resolution: "listr2@npm:4.0.5" + dependencies: + cli-truncate: ^2.1.0 + colorette: ^2.0.16 + log-update: ^4.0.0 + p-map: ^4.0.0 + rfdc: ^1.3.0 + rxjs: ^7.5.5 + through: ^2.3.8 + wrap-ansi: ^7.0.0 + peerDependencies: + enquirer: ">= 2.3.0 < 3" + peerDependenciesMeta: + enquirer: + optional: true + checksum: 0e64dc5e66fbd4361f6b35c49489ed842a1d7de30cf2b5c06bf4569669449288698b8ea93f7842aaf3c510963a1e554bca31376b9054d1521445d1ce4c917ea1 + languageName: node + linkType: hard + "load-tsconfig@npm:^0.2.3": version: 0.2.5 resolution: "load-tsconfig@npm:0.2.5" @@ -22228,14 +23979,14 @@ __metadata: languageName: node linkType: hard -"lodash@npm:4.17.21, lodash@npm:^4.17.11, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.21, lodash@npm:~4.17.21": +"lodash@npm:4.17.21, lodash@npm:^4.17.11, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:~4.17.0, lodash@npm:~4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c languageName: node linkType: hard -"log-symbols@npm:^4.1.0": +"log-symbols@npm:^4.0.0, log-symbols@npm:^4.1.0": version: 4.1.0 resolution: "log-symbols@npm:4.1.0" dependencies: @@ -22308,6 +24059,15 @@ __metadata: languageName: node linkType: hard +"lower-case-first@npm:^2.0.2": + version: 2.0.2 + resolution: "lower-case-first@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: 22253389fa0693ec1ba09b9394be3a8228304bf21d074703db2eef97c16cda9c66462d88f9b91d4ad0186493d23cad99c63d38ebc13f9a808bc83aad539ff404 + languageName: node + linkType: hard + "lower-case@npm:^2.0.2": version: 2.0.2 resolution: "lower-case@npm:2.0.2" @@ -22498,6 +24258,13 @@ __metadata: languageName: node linkType: hard +"map-cache@npm:^0.2.0": + version: 0.2.2 + resolution: "map-cache@npm:0.2.2" + checksum: 05e3eb005c1b80b9f949ca007687640e8c5d0fc88dc45c3c3ab4902a3bec79d66a58f3e3b04d6985d90cd267c629c7b46c977e9c34433e8c11ecfcbb9f0fa290 + languageName: node + linkType: hard + "map-obj@npm:^1.0.0": version: 1.0.1 resolution: "map-obj@npm:1.0.1" @@ -22782,6 +24549,18 @@ __metadata: languageName: node linkType: hard +"meros@npm:^1.2.1": + version: 1.3.0 + resolution: "meros@npm:1.3.0" + peerDependencies: + "@types/node": ">=13" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 2cf9a31228ae6441428a750b67beafec062cc0d693942045336dbe6bfb44507e0ca42854a46f483ebd97e4d78cbc31322b3b85f9648b60fa7a4b28fc0f858f51 + languageName: node + linkType: hard + "methods@npm:^1.1.1, methods@npm:^1.1.2, methods@npm:~1.1.2": version: 1.1.2 resolution: "methods@npm:1.1.2" @@ -22997,6 +24776,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^9.0.5": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: ^2.0.1 + checksum: de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + languageName: node + linkType: hard + "minimist-options@npm:^4.0.2": version: 4.1.0 resolution: "minimist-options@npm:4.1.0" @@ -23633,6 +25421,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.18": + version: 2.0.18 + resolution: "node-releases@npm:2.0.18" + checksum: 786ac9db9d7226339e1dc84bbb42007cb054a346bd9257e6aa154d294f01bc6a6cddb1348fa099f079be6580acbb470e3c048effd5f719325abd0179e566fd27 + languageName: node + linkType: hard + "node-schedule@npm:^2.1.1": version: 2.1.1 resolution: "node-schedule@npm:2.1.1" @@ -23708,6 +25503,15 @@ __metadata: languageName: node linkType: hard +"normalize-path@npm:^2.1.1": + version: 2.1.1 + resolution: "normalize-path@npm:2.1.1" + dependencies: + remove-trailing-separator: ^1.0.1 + checksum: db814326ff88057437233361b4c7e9cac7b54815b051b57f2d341ce89b1d8ec8cbd43e7fa95d7652b3b69ea8fcc294b89b8530d556a84d1bdace94229e1e9a8b + languageName: node + linkType: hard + "normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" @@ -23765,6 +25569,13 @@ __metadata: languageName: node linkType: hard +"nullthrows@npm:^1.1.1": + version: 1.1.1 + resolution: "nullthrows@npm:1.1.1" + checksum: 56f34bd7c3dcb3bd23481a277fa22918120459d3e9d95ca72976c72e9cac33a97483f0b95fc420e2eb546b9fe6db398273aba9a938650cdb8c98ee8f159dcb30 + languageName: node + linkType: hard + "number-is-nan@npm:^1.0.0": version: 1.0.1 resolution: "number-is-nan@npm:1.0.1" @@ -24207,6 +26018,15 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:3.1.0, p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + "p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" @@ -24216,15 +26036,6 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: ^0.1.0 - checksum: 9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a - languageName: node - linkType: hard - "p-limit@npm:^4.0.0": version: 4.0.0 resolution: "p-limit@npm:4.0.0" @@ -24324,6 +26135,16 @@ __metadata: languageName: node linkType: hard +"param-case@npm:^3.0.4": + version: 3.0.4 + resolution: "param-case@npm:3.0.4" + dependencies: + dot-case: ^3.0.4 + tslib: ^2.0.3 + checksum: ccc053f3019f878eca10e70ec546d92f51a592f762917dafab11c8b532715dcff58356118a6f350976e4ab109e321756f05739643ed0ca94298e82291e6f9e76 + languageName: node + linkType: hard + "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -24340,6 +26161,17 @@ __metadata: languageName: node linkType: hard +"parse-filepath@npm:^1.0.2": + version: 1.0.2 + resolution: "parse-filepath@npm:1.0.2" + dependencies: + is-absolute: ^1.0.0 + map-cache: ^0.2.0 + path-root: ^0.1.1 + checksum: 37bbd225fa864257246777efbdf72a9305c4ae12110bf467d11994e93f8be60dd309dcef68124a2c78c5d3b4e64e1c36fcc2560e2ea93fd97767831e7a446805 + languageName: node + linkType: hard + "parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" @@ -24402,6 +26234,16 @@ __metadata: languageName: node linkType: hard +"path-case@npm:^3.0.4": + version: 3.0.4 + resolution: "path-case@npm:3.0.4" + dependencies: + dot-case: ^3.0.4 + tslib: ^2.0.3 + checksum: b6b14637228a558793f603aaeb2fcd981e738b8b9319421b713532fba96d75aa94024b9f6b9ae5aa33d86755144a5b36697d28db62ae45527dbd672fcc2cf0b7 + languageName: node + linkType: hard + "path-exists@npm:^3.0.0": version: 3.0.0 resolution: "path-exists@npm:3.0.0" @@ -24451,6 +26293,22 @@ __metadata: languageName: node linkType: hard +"path-root-regex@npm:^0.1.0": + version: 0.1.2 + resolution: "path-root-regex@npm:0.1.2" + checksum: 27651a234f280c70d982dd25c35550f74a4284cde6b97237aab618cb4b5745682d18cdde1160617bb4a4b6b8aec4fbc911c4a2ad80d01fa4c7ee74dae7af2337 + languageName: node + linkType: hard + +"path-root@npm:^0.1.1": + version: 0.1.1 + resolution: "path-root@npm:0.1.1" + dependencies: + path-root-regex: ^0.1.0 + checksum: aed5cd290df84c46c7730f6a363e95e47a23929b51ab068a3818d69900da3e89dc154cdfd0c45c57b2e02f40c094351bc862db70c2cb00b7e6bd47039a227813 + languageName: node + linkType: hard + "path-scurry@npm:^1.10.2": version: 1.10.2 resolution: "path-scurry@npm:1.10.2" @@ -24663,6 +26521,13 @@ __metadata: languageName: node linkType: hard +"picocolors@npm:^1.0.1": + version: 1.1.0 + resolution: "picocolors@npm:1.1.0" + checksum: 86946f6032148801ef09c051c6fb13b5cf942eaf147e30ea79edb91dd32d700934edebe782a1078ff859fb2b816792e97ef4dab03d7f0b804f6b01a0df35e023 + languageName: node + linkType: hard + "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.2.3, picomatch@npm:^2.3.0, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" @@ -25592,6 +27457,15 @@ __metadata: languageName: node linkType: hard +"promise@npm:^7.1.1": + version: 7.3.1 + resolution: "promise@npm:7.3.1" + dependencies: + asap: ~2.0.3 + checksum: 742e5c0cc646af1f0746963b8776299701ad561ce2c70b49365d62c8db8ea3681b0a1bf0d4e2fe07910bf72f02d39e51e8e73dc8d7503c3501206ac908be107f + languageName: node + linkType: hard + "prompts@npm:^2.0.1, prompts@npm:^2.4.0, prompts@npm:^2.4.2": version: 2.4.2 resolution: "prompts@npm:2.4.2" @@ -25689,7 +27563,7 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^1.4.1": +"punycode@npm:^1.3.2, punycode@npm:^1.4.1": version: 1.4.1 resolution: "punycode@npm:1.4.1" checksum: 354b743320518aef36f77013be6e15da4db24c2b4f62c5f1eb0529a6ed02fbaf1cb52925785f6ab85a962f2b590d9cd5ad730b70da72b5f180e2556b8bd3ca08 @@ -25728,6 +27602,22 @@ __metadata: languageName: node linkType: hard +"pvtsutils@npm:^1.3.2, pvtsutils@npm:^1.3.5": + version: 1.3.5 + resolution: "pvtsutils@npm:1.3.5" + dependencies: + tslib: ^2.6.1 + checksum: d425aed316907e0b447a459bfb97c55d22270c3cfdba5a07ec90da0737b0e40f4f1771a444636f85bb6a453de90ff8c6b5f4f6ddba7597977166af49974b4534 + languageName: node + linkType: hard + +"pvutils@npm:^1.1.3": + version: 1.1.3 + resolution: "pvutils@npm:1.1.3" + checksum: 23489e6b3c76b6afb6964a20f891d6bef092939f401c78bba186b2bfcdc7a13904a0af0a78f7933346510f8c1228d5ab02d3c80e968fd84d3c76ff98d8ec9aac + languageName: node + linkType: hard + "qs@npm:6.11.0": version: 6.11.0 resolution: "qs@npm:6.11.0" @@ -26586,6 +28476,17 @@ __metadata: languageName: node linkType: hard +"relay-runtime@npm:12.0.0": + version: 12.0.0 + resolution: "relay-runtime@npm:12.0.0" + dependencies: + "@babel/runtime": ^7.0.0 + fbjs: ^3.0.0 + invariant: ^2.2.4 + checksum: f5d29b5c2f3c8a3438d43dcbc3022bd454c4ecbd4f0b10616df08bedc62d8aaa84f155f23e374053cf9f4a8238b93804e37a5b37ed9dc7ad01436d62d1b01d53 + languageName: node + linkType: hard + "remark-external-links@npm:^8.0.0": version: 8.0.0 resolution: "remark-external-links@npm:8.0.0" @@ -26610,6 +28511,13 @@ __metadata: languageName: node linkType: hard +"remedial@npm:^1.0.7": + version: 1.0.8 + resolution: "remedial@npm:1.0.8" + checksum: ca1e22d2958e3f0f2fdb5f1c23fecadab5d83a0b1e291c67474c806ce07801212f1d2006995bdcfb592803ead7666e2b1fbb9281b3f32d4a87ff2335b3777725 + languageName: node + linkType: hard + "remove-accents@npm:0.5.0": version: 0.5.0 resolution: "remove-accents@npm:0.5.0" @@ -26617,6 +28525,13 @@ __metadata: languageName: node linkType: hard +"remove-trailing-separator@npm:^1.0.1": + version: 1.1.0 + resolution: "remove-trailing-separator@npm:1.1.0" + checksum: 3568f9f8f5af3737b4aee9e6e1e8ec4be65a92da9cb27f989e0893714d50aa95ed2ff02d40d1fa35e1b1a234dc9c2437050ef356704a3999feaca6667d9e9bfc + languageName: node + linkType: hard + "remove-trailing-slash@npm:^0.1.1": version: 0.1.1 resolution: "remove-trailing-slash@npm:0.1.1" @@ -26624,6 +28539,13 @@ __metadata: languageName: node linkType: hard +"remove-trailing-spaces@npm:^1.0.6": + version: 1.0.8 + resolution: "remove-trailing-spaces@npm:1.0.8" + checksum: b9a4d74fd77e4a81b83cd19152abe1d658e5ecf13bc9b789c2699d7166d3879258a61625f8fc0274ef5719ab70e514ae86234fee481f6b41b50729949b837c1b + languageName: node + linkType: hard + "request-ip@npm:^3.3.0": version: 3.3.0 resolution: "request-ip@npm:3.3.0" @@ -26769,6 +28691,13 @@ __metadata: languageName: node linkType: hard +"resolve-from@npm:5.0.0, resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 + languageName: node + linkType: hard + "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" @@ -26776,13 +28705,6 @@ __metadata: languageName: node linkType: hard -"resolve-from@npm:^5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 - languageName: node - linkType: hard - "resolve-url-loader@npm:^5.0.0": version: 5.0.0 resolution: "resolve-url-loader@npm:5.0.0" @@ -27466,6 +29388,13 @@ __metadata: languageName: node linkType: hard +"scuid@npm:^1.1.0": + version: 1.1.0 + resolution: "scuid@npm:1.1.0" + checksum: 01c6bd2657ceaa148ead0c836df6251f561166142059261022a38dba429b30141e27ab3c0eca1012b88912f51a9e848e475fe1b6259ef1c61a0a7f6eb54fb261 + languageName: node + linkType: hard + "semver-compare@npm:^1.0.0": version: 1.0.0 resolution: "semver-compare@npm:1.0.0" @@ -27575,6 +29504,17 @@ __metadata: languageName: node linkType: hard +"sentence-case@npm:^3.0.4": + version: 3.0.4 + resolution: "sentence-case@npm:3.0.4" + dependencies: + no-case: ^3.0.4 + tslib: ^2.0.3 + upper-case-first: ^2.0.2 + checksum: 9a90527a51300cf5faea7fae0c037728f9ddcff23ac083883774c74d180c0a03c31aab43d5c3347512e8c1b31a0d4712512ec82beb71aa79b85149f9abeb5467 + languageName: node + linkType: hard + "serialize-javascript@npm:^4.0.0": version: 4.0.0 resolution: "serialize-javascript@npm:4.0.0" @@ -27641,6 +29581,13 @@ __metadata: languageName: node linkType: hard +"setimmediate@npm:^1.0.5": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: 5bae81bfdbfbd0ce992893286d49c9693c82b1bcc00dcaaf3a09c8f428fdeacf4190c013598b81875dfac2b08a572422db7df779a99332d0fce186d15a3e4d49 + languageName: node + linkType: hard + "setprototypeof@npm:1.1.1": version: 1.1.1 resolution: "setprototypeof@npm:1.1.1" @@ -27703,6 +29650,13 @@ __metadata: languageName: node linkType: hard +"shell-quote@npm:^1.7.3": + version: 1.8.1 + resolution: "shell-quote@npm:1.8.1" + checksum: 8cec6fd827bad74d0a49347057d40dfea1e01f12a6123bf82c4649f3ef152fc2bc6d6176e6376bffcd205d9d0ccb4f1f9acae889384d20baff92186f01ea455a + languageName: node + linkType: hard + "should-equal@npm:^2.0.0": version: 2.0.0 resolution: "should-equal@npm:2.0.0" @@ -27792,6 +29746,13 @@ __metadata: languageName: node linkType: hard +"signedsource@npm:^1.0.0": + version: 1.0.0 + resolution: "signedsource@npm:1.0.0" + checksum: dbb4ade9c94888e83c16d23ef1a43195799de091d366d130be286415e8aeb97b3f25b14fd26fc5888e1335d703ad561374fddee32e43b7cea04751b93d178a47 + languageName: node + linkType: hard + "simple-oauth2@npm:^5.0.0": version: 5.0.0 resolution: "simple-oauth2@npm:5.0.0" @@ -28125,6 +30086,15 @@ __metadata: languageName: node linkType: hard +"sponge-case@npm:^1.0.1": + version: 1.0.1 + resolution: "sponge-case@npm:1.0.1" + dependencies: + tslib: ^2.0.3 + checksum: dbe42f300ae9f7fbd83c40f71c2a61ecf9c86b927b5668bae067d1e516e314671cc85166f87017e51b56938409b1fc042719eb46a6d5bb30cc1cf23252a82761 + languageName: node + linkType: hard + "sprintf-js@npm:^1.1.1, sprintf-js@npm:^1.1.3": version: 1.1.3 resolution: "sprintf-js@npm:1.1.3" @@ -28329,6 +30299,13 @@ __metadata: languageName: node linkType: hard +"string-env-interpolation@npm:^1.0.1": + version: 1.0.1 + resolution: "string-env-interpolation@npm:1.0.1" + checksum: 410046e621e71678e71816377d799b40ba88d236708c0ad015114137fa3575f1b3cf14bfd63ec5eaa35ea43ac582308e60a8e1a3839a10f475b8db73470105bc + languageName: node + linkType: hard + "string-hash@npm:^1.1.1": version: 1.1.3 resolution: "string-hash@npm:1.1.3" @@ -28802,6 +30779,15 @@ __metadata: languageName: node linkType: hard +"swap-case@npm:^2.0.2": + version: 2.0.2 + resolution: "swap-case@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: 6a47c1926e06395ead750905e103be388aeec8c9697f20b14bc3e1e86fcb4fc78e5033197afe6cc8bbed80f0a4ee1f184b0fa22eec7f4a767bdfd278683d52eb + languageName: node + linkType: hard + "symbol-tree@npm:^3.2.2, symbol-tree@npm:^3.2.4": version: 3.2.4 resolution: "symbol-tree@npm:3.2.4" @@ -29090,6 +31076,15 @@ __metadata: languageName: node linkType: hard +"title-case@npm:^3.0.3": + version: 3.0.3 + resolution: "title-case@npm:3.0.3" + dependencies: + tslib: ^2.0.3 + checksum: face56f686060f777b43a180d371407124d201eb4238c19d9e97030fd54859696ca4e2ca499cc232f8700f24f2414cc08aab9fdf6d39acff055dd825a4d86d6a + languageName: node + linkType: hard + "titleize@npm:^3.0.0": version: 3.0.0 resolution: "titleize@npm:3.0.0" @@ -29335,6 +31330,13 @@ __metadata: languageName: node linkType: hard +"ts-log@npm:^2.2.3": + version: 2.2.5 + resolution: "ts-log@npm:2.2.5" + checksum: bbc45faa97d47238b896e85e9e0fc12e3d2d72b56755fba305290489532319c83bae82e282b92a5469f432f2dfa365da7ee0469d6d528ce04cd9dd75d4e2a147 + languageName: node + linkType: hard + "ts-node@npm:^10.9.1": version: 10.9.2 resolution: "ts-node@npm:10.9.2" @@ -29428,6 +31430,20 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.5.0, tslib@npm:^2.6.3": + version: 2.7.0 + resolution: "tslib@npm:2.7.0" + checksum: 469e1d5bf1af585742128827000711efa61010b699cb040ab1800bcd3ccdd37f63ec30642c9e07c4439c1db6e46345582614275daca3e0f4abae29b0083f04a6 + languageName: node + linkType: hard + +"tslib@npm:~2.6.0": + version: 2.6.3 + resolution: "tslib@npm:2.6.3" + checksum: 2598aef53d9dbe711af75522464b2104724d6467b26a60f2bdac8297d2b5f1f6b86a71f61717384aa8fd897240467aaa7bcc36a0700a0faf751293d1331db39a + languageName: node + linkType: hard + "tsscmp@npm:1.0.6": version: 1.0.6 resolution: "tsscmp@npm:1.0.6" @@ -30217,6 +32233,15 @@ __metadata: languageName: node linkType: hard +"unixify@npm:^1.0.0": + version: 1.0.0 + resolution: "unixify@npm:1.0.0" + dependencies: + normalize-path: ^2.1.1 + checksum: 8b89100619ebde9f0ab4024a4d402316fb7b1d4853723410fc828944e8d3d01480f210cddf94d9a1699559f8180d861eb6323da8011b7bcc1bbaf6a11a5b1f1e + languageName: node + linkType: hard + "unpipe@npm:1.0.0, unpipe@npm:~1.0.0": version: 1.0.0 resolution: "unpipe@npm:1.0.0" @@ -30257,6 +32282,20 @@ __metadata: languageName: node linkType: hard +"update-browserslist-db@npm:^1.1.0": + version: 1.1.0 + resolution: "update-browserslist-db@npm:1.1.0" + dependencies: + escalade: ^3.1.2 + picocolors: ^1.0.1 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: a7452de47785842736fb71547651c5bbe5b4dc1e3722ccf48a704b7b34e4dcf633991eaa8e4a6a517ffb738b3252eede3773bef673ef9021baa26b056d63a5b9 + languageName: node + linkType: hard + "upgrade@npm:^1.1.0": version: 1.1.0 resolution: "upgrade@npm:1.1.0" @@ -30264,6 +32303,24 @@ __metadata: languageName: node linkType: hard +"upper-case-first@npm:^2.0.2": + version: 2.0.2 + resolution: "upper-case-first@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: ccad6a0b143310ebfba2b5841f30bef71246297385f1329c022c902b2b5fc5aee009faf1ac9da5ab3ba7f615b88f5dc1cd80461b18a8f38cb1d4c3eb92538ea9 + languageName: node + linkType: hard + +"upper-case@npm:^2.0.2": + version: 2.0.2 + resolution: "upper-case@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: 5ac176c9d3757abb71400df167f9abb46d63152d5797c630d1a9f083fbabd89711fb4b3dc6de06ff0138fe8946fa5b8518b4fcdae9ca8a3e341417075beae069 + languageName: node + linkType: hard + "uri-js@npm:^4.2.2, uri-js@npm:^4.4.1": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -30290,6 +32347,20 @@ __metadata: languageName: node linkType: hard +"urlpattern-polyfill@npm:^10.0.0": + version: 10.0.0 + resolution: "urlpattern-polyfill@npm:10.0.0" + checksum: 43593f2a89bd54f2d5b5105ef4896ac5c5db66aef723759fbd15cd5eb1ea6cdae9d112e257eda9bbc3fb0cd90be6ac6e9689abe4ca69caa33114f42a27363531 + languageName: node + linkType: hard + +"urlpattern-polyfill@npm:^8.0.0": + version: 8.0.2 + resolution: "urlpattern-polyfill@npm:8.0.2" + checksum: 5388bbe8459dbd8861ee7cb97904be915dd863a9789c2191c528056f16adad7836ec22762ed002fed44e8995d0f98bdfb75a606466b77233e70d0f61b969aaf9 + languageName: node + linkType: hard + "use-callback-ref@npm:^1.3.0": version: 1.3.2 resolution: "use-callback-ref@npm:1.3.2" @@ -30438,7 +32509,7 @@ __metadata: languageName: node linkType: hard -"value-or-promise@npm:^1.0.12": +"value-or-promise@npm:^1.0.11, value-or-promise@npm:^1.0.12": version: 1.0.12 resolution: "value-or-promise@npm:1.0.12" checksum: b75657b74e4d17552bd88e0c2857020fbab34a4d091dc058db18c470e7da0336067e72c130b3358e3321ac0a6ff11c0b92b67a382318a3705ad5d57de7ff3262 @@ -30771,13 +32842,26 @@ __metadata: languageName: node linkType: hard -"web-streams-polyfill@npm:^3.0.3": +"web-streams-polyfill@npm:^3.0.3, web-streams-polyfill@npm:^3.2.1": version: 3.3.3 resolution: "web-streams-polyfill@npm:3.3.3" checksum: 64e855c47f6c8330b5436147db1c75cb7e7474d924166800e8e2aab5eb6c76aac4981a84261dd2982b3e754490900b99791c80ae1407a9fa0dcff74f82ea3a7f languageName: node linkType: hard +"webcrypto-core@npm:^1.8.0": + version: 1.8.0 + resolution: "webcrypto-core@npm:1.8.0" + dependencies: + "@peculiar/asn1-schema": ^2.3.8 + "@peculiar/json-schema": ^1.1.12 + asn1js: ^3.0.1 + pvtsutils: ^1.3.5 + tslib: ^2.6.2 + checksum: d4158af402500eb26d0de6e088baa0fbef41c43a3e3b5f53b8326c8c517e55037b3d8a17672cf48bdccfd13526599857544ea8485e2172bb14c9ee4561d706a5 + languageName: node + linkType: hard + "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" @@ -31186,6 +33270,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^8.12.0, ws@npm:^8.17.1": + version: 8.18.0 + resolution: "ws@npm:8.18.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 25eb33aff17edcb90721ed6b0eb250976328533ad3cd1a28a274bd263682e7296a6591ff1436d6cbc50fa67463158b062f9d1122013b361cec99a05f84680e06 + languageName: node + linkType: hard + "xdg-basedir@npm:^4.0.0": version: 4.0.0 resolution: "xdg-basedir@npm:4.0.0" @@ -31263,7 +33362,7 @@ __metadata: languageName: node linkType: hard -"yaml-ast-parser@npm:0.0.43": +"yaml-ast-parser@npm:0.0.43, yaml-ast-parser@npm:^0.0.43": version: 0.0.43 resolution: "yaml-ast-parser@npm:0.0.43" checksum: 4d2f1e761067b2c6abdd882279a406f879258787af470a6d4a659cb79cb2ab056b870b25f1f80f46ed556e8b499d611d247806376f53edf3412f72c0a8ea2e98 @@ -31286,6 +33385,15 @@ __metadata: languageName: node linkType: hard +"yaml@npm:^2.3.1": + version: 2.5.1 + resolution: "yaml@npm:2.5.1" + bin: + yaml: bin.mjs + checksum: 40fba5682898dbeeb3319e358a968fe886509fab6f58725732a15f8dda3abac509f91e76817c708c9959a15f786f38ff863c1b88062d7c1162c5334a7d09cb4a + languageName: node + linkType: hard + "yargs-parser@npm:^18.1.2, yargs-parser@npm:^18.1.3": version: 18.1.3 resolution: "yargs-parser@npm:18.1.3" @@ -31325,7 +33433,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:17.7.2, yargs@npm:^17.0.1, yargs@npm:^17.3.1, yargs@npm:^17.5.1, yargs@npm:^17.7.1, yargs@npm:^17.7.2": +"yargs@npm:17.7.2, yargs@npm:^17.0.0, yargs@npm:^17.0.1, yargs@npm:^17.3.1, yargs@npm:^17.5.1, yargs@npm:^17.7.1, yargs@npm:^17.7.2": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: