@ehrenkind/shopify-lib 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README.md +172 -0
  2. package/dist/generated-api-types/2025-04/admin.generated.d.ts +181 -0
  3. package/dist/generated-api-types/2025-04/admin.generated.d.ts.map +1 -0
  4. package/dist/generated-api-types/2025-04/admin.generated.js +5 -0
  5. package/dist/generated-api-types/2025-04/admin.generated.js.map +1 -0
  6. package/dist/generated-api-types/2025-04/admin.types.d.ts +57664 -0
  7. package/dist/generated-api-types/2025-04/admin.types.d.ts.map +1 -0
  8. package/dist/generated-api-types/2025-04/admin.types.js +11356 -0
  9. package/dist/generated-api-types/2025-04/admin.types.js.map +1 -0
  10. package/dist/index.cjs +752 -0
  11. package/dist/index.cjs.map +1 -0
  12. package/dist/index.d.cts +18290 -0
  13. package/dist/index.d.ts +3 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +3 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/index.mjs +719 -0
  18. package/dist/index.mjs.map +1 -0
  19. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.d.ts +4 -0
  20. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.d.ts.map +1 -0
  21. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.js +56 -0
  22. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.js.map +1 -0
  23. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.d.ts +3 -0
  24. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.d.ts.map +1 -0
  25. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.js +11 -0
  26. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.js.map +1 -0
  27. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.d.ts +2 -0
  28. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.d.ts.map +1 -0
  29. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.js +11 -0
  30. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.js.map +1 -0
  31. package/dist/queries/orders/getOrderByName.d.ts +26 -0
  32. package/dist/queries/orders/getOrderByName.d.ts.map +1 -0
  33. package/dist/queries/orders/getOrderByName.js +117 -0
  34. package/dist/queries/orders/getOrderByName.js.map +1 -0
  35. package/dist/queries/orders/getOrderByName.mock.d.ts +21 -0
  36. package/dist/queries/orders/getOrderByName.mock.d.ts.map +1 -0
  37. package/dist/queries/orders/getOrderByName.mock.js +55 -0
  38. package/dist/queries/orders/getOrderByName.mock.js.map +1 -0
  39. package/dist/queries/orders/getOrderByName.queries.d.ts +3 -0
  40. package/dist/queries/orders/getOrderByName.queries.d.ts.map +1 -0
  41. package/dist/queries/orders/getOrderByName.queries.js +335 -0
  42. package/dist/queries/orders/getOrderByName.queries.js.map +1 -0
  43. package/dist/queries/orders/getOrderByName.test.d.ts +2 -0
  44. package/dist/queries/orders/getOrderByName.test.d.ts.map +1 -0
  45. package/dist/queries/orders/getOrderByName.test.js +28 -0
  46. package/dist/queries/orders/getOrderByName.test.js.map +1 -0
  47. package/dist/queries/productVariants/getLeanProductVariants.d.ts +21 -0
  48. package/dist/queries/productVariants/getLeanProductVariants.d.ts.map +1 -0
  49. package/dist/queries/productVariants/getLeanProductVariants.js +81 -0
  50. package/dist/queries/productVariants/getLeanProductVariants.js.map +1 -0
  51. package/dist/queries/productVariants/getLeanProductVariants.mock.d.ts +3 -0
  52. package/dist/queries/productVariants/getLeanProductVariants.mock.d.ts.map +1 -0
  53. package/dist/queries/productVariants/getLeanProductVariants.mock.js +33 -0
  54. package/dist/queries/productVariants/getLeanProductVariants.mock.js.map +1 -0
  55. package/dist/queries/productVariants/getLeanProductVariants.test.d.ts +2 -0
  56. package/dist/queries/productVariants/getLeanProductVariants.test.d.ts.map +1 -0
  57. package/dist/queries/productVariants/getLeanProductVariants.test.js +38 -0
  58. package/dist/queries/productVariants/getLeanProductVariants.test.js.map +1 -0
  59. package/dist/utils/logger.d.ts +11 -0
  60. package/dist/utils/logger.d.ts.map +1 -0
  61. package/dist/utils/logger.js +50 -0
  62. package/dist/utils/logger.js.map +1 -0
  63. package/dist/utils/mswHandlers.d.ts +2 -0
  64. package/dist/utils/mswHandlers.d.ts.map +1 -0
  65. package/dist/utils/mswHandlers.js +32 -0
  66. package/dist/utils/mswHandlers.js.map +1 -0
  67. package/dist/utils/shopifyClient.d.ts +6 -0
  68. package/dist/utils/shopifyClient.d.ts.map +1 -0
  69. package/dist/utils/shopifyClient.js +82 -0
  70. package/dist/utils/shopifyClient.js.map +1 -0
  71. package/dist/utils/shopifyClient.mock.d.ts +3 -0
  72. package/dist/utils/shopifyClient.mock.d.ts.map +1 -0
  73. package/dist/utils/shopifyClient.mock.js +19 -0
  74. package/dist/utils/shopifyClient.mock.js.map +1 -0
  75. package/dist/utils/shopifyClient.test.d.ts +2 -0
  76. package/dist/utils/shopifyClient.test.d.ts.map +1 -0
  77. package/dist/utils/shopifyClient.test.js +27 -0
  78. package/dist/utils/shopifyClient.test.js.map +1 -0
  79. package/dist/utils/shopifyFetch.d.ts +19 -0
  80. package/dist/utils/shopifyFetch.d.ts.map +1 -0
  81. package/dist/utils/shopifyFetch.js +60 -0
  82. package/dist/utils/shopifyFetch.js.map +1 -0
  83. package/dist/utils/shopifyFetch.test.d.ts +2 -0
  84. package/dist/utils/shopifyFetch.test.d.ts.map +1 -0
  85. package/dist/utils/shopifyFetch.test.js +17 -0
  86. package/dist/utils/shopifyFetch.test.js.map +1 -0
  87. package/dist/utils/test-setup.d.ts +2 -0
  88. package/dist/utils/test-setup.d.ts.map +1 -0
  89. package/dist/utils/test-setup.js +13 -0
  90. package/dist/utils/test-setup.js.map +1 -0
  91. package/dist/utils/zod.d.ts +3 -0
  92. package/dist/utils/zod.d.ts.map +1 -0
  93. package/dist/utils/zod.js +19 -0
  94. package/dist/utils/zod.js.map +1 -0
  95. package/package.json +75 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/queries/orders/getOrderByName.ts","../src/utils/logger.ts","../src/utils/shopifyClient.ts","../src/utils/shopifyFetch.ts","../src/utils/zod.ts","../src/queries/orders/getOrderByName.queries.ts","../src/queries/productVariants/getLeanProductVariants.ts"],"sourcesContent":["import z from 'zod'\nimport type {\n OrdersByNameFullQuery,\n OrdersByNameQuery,\n OrdersByNameQueryVariables,\n} from '../../generated-api-types/2025-04/admin.generated.js'\nimport { logger } from '../../utils/logger.js'\nimport { fetchShopifyGraphql } from '../../utils/shopifyFetch.js'\nimport { returnOutputParsed } from '../../utils/zod.js'\nimport {\n queryOrdersByName,\n queryOrdersByNameFull,\n} from './getOrderByName.queries.js'\n\nconst GetLeanOrderByNameReturn = z\n .object({\n id: z.string(),\n name: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n totalPrice: z.object({\n amount: z.string(),\n currencyCode: z.string(),\n }),\n customer: z\n .object({\n id: z.string(),\n displayName: z.string(),\n emailAddress: z.string().nullable(),\n })\n .nullable(),\n financialStatus: z.string().nullable(),\n fulfillmentStatus: z.string().nullable(),\n })\n .nullable()\n\ntype GetLeanOrderByNameReturnType = z.infer<typeof GetLeanOrderByNameReturn>\n\ntype GetFullOrderByNameReturnType = NonNullable<\n NonNullable<OrdersByNameFullQuery['orders']>['edges'][number]['node']\n> | null\n\ntype OrderDetailLevel = 'lean' | 'full'\n\n// Function overloads\nexport function getOrderByName(\n orderName: string,\n detailLevel: 'lean',\n): Promise<GetLeanOrderByNameReturnType>\nexport function getOrderByName(\n orderName: string,\n detailLevel: 'full',\n): Promise<GetFullOrderByNameReturnType>\nexport function getOrderByName(\n orderName: string,\n): Promise<GetLeanOrderByNameReturnType>\n\n/**\n * Retrieves a single order from Shopify by its order name (e.g., \"B12345\").\n * Returns null if no order is found with the specified name.\n *\n * @param {string} orderName - The order name to search for (e.g., \"B12345\").\n * @param {OrderDetailLevel} detailLevel - The level of detail to return ('lean' or 'full'). Defaults to 'lean'.\n * @returns {Promise<GetLeanOrderByNameReturnType | GetFullOrderByNameReturnType>} A promise that resolves to the order data or null if not found.\n * @throws {Error} If the GraphQL query fails or if the response structure is invalid.\n */\nexport async function getOrderByName(\n orderName: string,\n detailLevel: OrderDetailLevel = 'lean',\n): Promise<GetLeanOrderByNameReturnType | GetFullOrderByNameReturnType> {\n if (detailLevel === 'lean') {\n return getLeanOrderByName(orderName)\n }\n return getFullOrderByName(orderName)\n}\n\nasync function getLeanOrderByName(\n orderName: string,\n): Promise<GetLeanOrderByNameReturnType> {\n const variables: OrdersByNameQueryVariables = {\n first: 1,\n queryFilter: `name:${orderName}`,\n }\n\n type SingleNode = NonNullable<\n NonNullable<OrdersByNameQuery['orders']>['edges'][number]['node']\n >\n\n const extractedNodes = await fetchShopifyGraphql<\n SingleNode,\n OrdersByNameQuery\n >({\n query: queryOrdersByName,\n variables,\n dataExtractor: (pageData: OrdersByNameQuery) => {\n if (!pageData.orders) {\n throw new Error(\n \"GraphQL response for orders is missing the 'orders' field.\",\n )\n }\n const nodes: SingleNode[] = pageData.orders.edges.map(\n (edge: { node: SingleNode }) => edge.node,\n )\n return {\n nodes,\n }\n },\n fetchAllPages: false,\n })\n\n const order = extractedNodes[0]\n if (!order) {\n logger.debug(`No order found with name: ${orderName}`)\n return null\n }\n\n const leanOrder = {\n id: order.id,\n name: order.name,\n createdAt: order.createdAt,\n updatedAt: order.updatedAt,\n totalPrice: {\n amount: order.totalPriceSet?.shopMoney?.amount ?? '',\n currencyCode: order.totalPriceSet?.shopMoney?.currencyCode ?? '',\n },\n customer: order.customer\n ? {\n id: order.customer.id,\n displayName: order.customer.displayName,\n emailAddress:\n order.customer.defaultEmailAddress?.emailAddress ?? null,\n }\n : null,\n financialStatus: order.displayFinancialStatus ?? null,\n fulfillmentStatus: order.displayFulfillmentStatus ?? null,\n }\n\n return await returnOutputParsed(leanOrder, GetLeanOrderByNameReturn)\n}\n\nasync function getFullOrderByName(\n orderName: string,\n): Promise<GetFullOrderByNameReturnType> {\n const variables: OrdersByNameQueryVariables = {\n first: 1,\n queryFilter: `name:${orderName}`,\n }\n\n type SingleNode = NonNullable<\n NonNullable<OrdersByNameFullQuery['orders']>['edges'][number]['node']\n >\n\n const extractedNodes = await fetchShopifyGraphql<\n SingleNode,\n OrdersByNameFullQuery\n >({\n query: queryOrdersByNameFull,\n variables,\n dataExtractor: (pageData: OrdersByNameFullQuery) => {\n if (!pageData.orders) {\n throw new Error(\n \"GraphQL response for orders is missing the 'orders' field.\",\n )\n }\n const nodes: SingleNode[] = pageData.orders.edges.map(\n (edge: { node: SingleNode }) => edge.node,\n )\n return {\n nodes,\n }\n },\n fetchAllPages: false,\n })\n\n if (extractedNodes.length === 0) {\n logger.debug(`No order found with name: ${orderName}`)\n return null\n }\n\n const order = extractedNodes[0]\n if (!order) {\n logger.debug(`No order found with name: ${orderName}`)\n return null\n }\n\n return order\n}\n","const { env } = process\n\nexport const gql = String.raw\n\nconst logLevels = {\n silent: 0,\n error: 1,\n warn: 2,\n info: 3,\n debug: 4,\n} as const\n\ntype LogLevelName = keyof typeof logLevels\n\nfunction getLogLevel(\n nodeEnv: string | undefined,\n logLevelEnv: string | undefined,\n): LogLevelName {\n if (logLevelEnv && logLevelEnv in logLevels) {\n return logLevelEnv as LogLevelName\n }\n\n if (nodeEnv === 'test') {\n return 'silent'\n }\n\n if (nodeEnv === 'production') {\n return 'info'\n }\n return 'debug'\n}\n\nexport const activeLogLevelName = getLogLevel(env.NODE_ENV, env.LOG_LEVEL)\nconst activeLogLevelValue = logLevels[activeLogLevelName]\n\nexport const logger = {\n debug: (...args: unknown[]) => {\n if (logLevels.debug <= activeLogLevelValue) {\n // biome-ignore lint/suspicious/noConsole: <explanation>\n console.debug(...args)\n }\n },\n info: (...args: unknown[]) => {\n if (logLevels.info <= activeLogLevelValue) {\n // biome-ignore lint/suspicious/noConsole: <explanation>\n console.info(...args)\n }\n },\n warn: (...args: unknown[]) => {\n if (logLevels.warn <= activeLogLevelValue) {\n // biome-ignore lint/suspicious/noConsole: <explanation>\n console.warn(...args)\n }\n },\n error: (...args: unknown[]) => {\n if (logLevels.error <= activeLogLevelValue) {\n // biome-ignore lint/suspicious/noConsole: <explanation>\n console.error(...args)\n }\n },\n}\n","import {\n ApiVersion,\n type GraphqlClient,\n LogSeverity,\n Session,\n shopifyApi,\n} from '@shopify/shopify-api'\nimport '@shopify/shopify-api/adapters/node'\nimport dotenv from 'dotenv'\nimport { z } from 'zod'\nimport { activeLogLevelName, logger } from './logger.js'\n\n// https://shopify.dev/docs/api/admin-graphql/2025-04/\nexport const SHOPIFY_API_VERSION = ApiVersion.April25\n\ndotenv.config()\n\nconst envSchema = z.object({\n SHOPIFY_API_KEY: z.string({\n error: () => ({ message: 'SHOPIFY_API_KEY is required' }),\n }),\n SHOPIFY_API_SECRET: z.string({\n error: () => ({ message: 'SHOPIFY_API_SECRET is required' }),\n }),\n SHOPIFY_API_HOSTNAME: z.string({\n error: () => ({ message: 'SHOPIFY_API_HOSTNAME is required' }),\n }),\n SHOPIFY_ACCESS_TOKEN: z.string({\n error: () => ({ message: 'SHOPIFY_ACCESS_TOKEN is required' }),\n }),\n NODE_ENV: z\n .enum(['development', 'production', 'test'])\n .default('development'),\n})\n\nconst mapLogLevelToShopifySeverity = (level: string): LogSeverity => {\n switch (level) {\n case 'silent':\n return LogSeverity.Error\n case 'debug':\n return LogSeverity.Debug\n case 'info':\n return LogSeverity.Info\n case 'warn':\n return LogSeverity.Warning\n case 'error':\n return LogSeverity.Error\n default:\n return LogSeverity.Info\n }\n}\n\nlet shopifyGraphqlClient: GraphqlClient\n\ntry {\n // biome-ignore lint/nursery/noProcessEnv: <explanation>\n const env = envSchema.parse(process.env)\n\n const shopify = shopifyApi({\n apiKey: env.SHOPIFY_API_KEY,\n apiSecretKey: env.SHOPIFY_API_SECRET,\n hostName: env.SHOPIFY_API_HOSTNAME,\n apiVersion: SHOPIFY_API_VERSION,\n isEmbeddedApp: false,\n logger: { level: mapLogLevelToShopifySeverity(activeLogLevelName) },\n future: {\n customerAddressDefaultFix: true,\n lineItemBilling: true,\n unstable_managedPricingSupport: false,\n },\n })\n\n const shopifySession = new Session({\n id: `custom-session-${env.SHOPIFY_API_HOSTNAME}`,\n shop: env.SHOPIFY_API_HOSTNAME,\n state: 'authenticated',\n isOnline: true,\n accessToken: env.SHOPIFY_ACCESS_TOKEN,\n })\n\n shopifyGraphqlClient = new shopify.clients.Graphql({\n session: shopifySession,\n })\n\n logger.info('Shopify API client initialized successfully.')\n} catch (error) {\n if (error instanceof z.ZodError) {\n const msg = z.prettifyError(error)\n logger.error(msg)\n } else {\n logger.error('Failed to initialize Shopify API client:', error)\n }\n throw error\n}\n\nexport { shopifyGraphqlClient as shopifyClient }\n","import { logger } from './logger.js'\nimport { shopifyClient } from './shopifyClient.js'\n\nexport function convertIdIntoGid(\n id: bigint,\n type: 'Order' | 'Customer',\n): string {\n return `gid://shopify/${type}/${id}`\n}\n\ninterface PageInfo {\n hasNextPage: boolean\n endCursor?: string | null | undefined\n}\n\ninterface ShopifyErrorWithMessage {\n message?: string\n [key: string]: unknown\n}\n\nexport async function fetchShopifyGraphql<TResultNode, TPageData>(params: {\n query: string\n variables: Record<string, unknown>\n dataExtractor: (pageData: TPageData) => {\n nodes: TResultNode[]\n pageInfo?: PageInfo\n userErrors?: { message?: string }[]\n }\n fetchAllPages?: boolean\n}): Promise<TResultNode[]> {\n const {\n query,\n variables: initialVariables,\n dataExtractor,\n fetchAllPages = false,\n } = params\n\n const allNodes: TResultNode[] = []\n let currentVariables = { ...initialVariables }\n let hasNextLoop = true\n\n type ShopifyRequestErrorType = {\n errors?: ShopifyErrorWithMessage | ShopifyErrorWithMessage[]\n }\n\n do {\n const response = (await shopifyClient.request<TPageData>(query, {\n variables: currentVariables,\n })) as { data?: TPageData } & ShopifyRequestErrorType\n\n if (response.errors) {\n let errorMessages = 'GraphQL query failed.'\n const errors = response.errors\n if (Array.isArray(errors)) {\n errorMessages = errors\n .map((e: ShopifyErrorWithMessage) => e.message || JSON.stringify(e))\n .join('\\n')\n } else if (\n typeof errors === 'object' &&\n errors !== null &&\n 'message' in errors\n ) {\n errorMessages = errors.message || JSON.stringify(errors)\n } else if (typeof errors === 'string') {\n errorMessages = errors\n } else {\n errorMessages = JSON.stringify(errors)\n }\n logger.error('GraphQL query failed:', errorMessages)\n throw new Error(`GraphQL errors: ${errorMessages}`)\n }\n\n if (!response.data) {\n throw new Error('No data in Shopify API response')\n }\n\n const { nodes, pageInfo, userErrors } = dataExtractor(response.data)\n\n // Handle Shopify mutation userErrors pattern\n if (Array.isArray(userErrors) && userErrors.length > 0) {\n const errorMessages = userErrors\n .map((e) => e.message || JSON.stringify(e))\n .join('\\n')\n logger.error('Shopify mutation userErrors:', errorMessages)\n throw new Error(`Shopify mutation userErrors: ${errorMessages}`)\n }\n\n allNodes.push(...nodes)\n\n hasNextLoop = fetchAllPages ? !!pageInfo?.hasNextPage : false\n if (hasNextLoop && pageInfo?.endCursor) {\n currentVariables = {\n ...currentVariables,\n after: pageInfo.endCursor,\n }\n }\n } while (hasNextLoop)\n\n return allNodes\n}\n","import z from 'zod'\nimport { logger } from './logger.js'\n\nexport async function returnOutputParsed<T>(\n data: unknown,\n Model: z.ZodType<T>,\n) {\n const parsed = await Model.safeParseAsync(data)\n if (!parsed.success) {\n if (parsed.error instanceof z.ZodError) {\n const msg = z.prettifyError(parsed.error)\n logger.error(msg)\n } else {\n logger.error('Failed to parse:', parsed.error)\n }\n // throw parsedVariants.error\n throw new Error('Failed to parse product variants')\n }\n logger.info('Parsed data successfully')\n return parsed.data\n}\n","import { gql } from '../../utils/logger'\n\nexport const queryOrdersByName = gql`#graphql\n query ordersByName($first: Int!, $queryFilter: String!) {\n orders(first: $first, query: $queryFilter) {\n edges {\n node {\n id\n name\n createdAt\n updatedAt\n totalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n customer {\n id\n lastName\n defaultEmailAddress {\n emailAddress\n }\n displayName\n firstName\n }\n displayFinancialStatus\n displayFulfillmentStatus\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n`\n\nexport const queryOrdersByNameFull = gql`#graphql\n query ordersByNameFull($first: Int!, $queryFilter: String!) {\n orders(first: $first, query: $queryFilter) {\n edges {\n node {\n billingAddress {\n address1\n address2\n city\n company\n country\n countryCodeV2\n firstName\n formattedArea\n id\n lastName\n name\n phone\n province\n provinceCode\n timeZone\n zip\n }\n billingAddressMatchesShippingAddress\n cancelReason\n cancellation {\n staffNote\n }\n cancelledAt\n capturable\n clientIp\n closed\n closedAt\n confirmed\n createdAt\n currencyCode\n currentCartDiscountAmountSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentShippingPriceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentSubtotalLineItemsQuantity\n currentSubtotalPriceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentTaxLines {\n channelLiable\n rate\n ratePercentage\n source\n title\n priceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n currentTotalAdditionalFeesSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentTotalDiscountsSet {\n presentmentMoney {\n amount\n currencyCode\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentTotalDutiesSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentTotalPriceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentTotalTaxSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentTotalWeight\n customer {\n id\n lastName\n defaultEmailAddress {\n emailAddress\n }\n displayName\n firstName\n }\n customerAcceptsMarketing\n discountCodes\n discountCode\n displayAddress {\n address1\n address2\n city\n company\n country\n countryCodeV2\n firstName\n formattedArea\n id\n lastName\n name\n phone\n province\n provinceCode\n timeZone\n zip\n }\n displayFinancialStatus\n displayFulfillmentStatus\n dutiesIncluded\n edited\n email\n estimatedTaxes\n fulfillable\n fulfillments(first: 20) {\n createdAt\n deliveredAt\n displayStatus\n estimatedDeliveryAt\n updatedAt\n trackingInfo(first: 10) {\n company\n url\n }\n totalQuantity\n status\n name\n id\n }\n fullyPaid\n id\n lineItems(first: 50) {\n edges {\n node {\n id\n name\n originalUnitPriceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n quantity\n requiresShipping\n sku\n title\n variantTitle\n }\n }\n }\n name\n note\n processedAt\n shippingAddress {\n address1\n address2\n city\n company\n country\n countryCodeV2\n firstName\n formattedArea\n id\n lastName\n name\n phone\n province\n provinceCode\n timeZone\n zip\n }\n statusPageUrl\n tags\n totalPriceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n totalReceivedSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n totalRefundedSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n totalShippingPriceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n totalTaxSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n totalWeight\n unpaid\n updatedAt\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n`\n","import z from 'zod'\nimport type {\n LeanProductVariantsQuery,\n LeanProductVariantsQueryVariables,\n} from '../../generated-api-types/2025-04/admin.generated.js'\nimport { gql, logger } from '../../utils/logger.js'\nimport { fetchShopifyGraphql } from '../../utils/shopifyFetch.js'\nimport { returnOutputParsed } from '../../utils/zod.js'\n\nconst GetLeanProductVariantsReturn = z.array(\n z.object({\n productId: z.string(),\n productTitle: z.string(),\n variantId: z.string(),\n variantTitle: z.string(),\n sku: z.string(),\n }),\n)\n\ntype GetLeanProductVariantsReturnType = z.infer<\n typeof GetLeanProductVariantsReturn\n>\n\n/**\n * Retrieves a lean list of product variants from Shopify, optionally filtered by SKUs.\n * Product variants are mapped to a simpler output structure.\n * Variants missing essential properties (e.g., SKU) will be filtered out and logged.\n *\n * @param {string[]} [skus] - An optional array of SKUs to filter by. If provided, only variants matching these SKUs will be fetched.\n * @returns {Promise<GetLeanProductVariantsReturnType>} A promise that resolves to an array of lean product variant data.\n * @throws {Error} If the GraphQL query fails, returns no data, or if the `productVariants` field is missing in the response.\n */\nexport async function getLeanProductVariants(\n skus?: string[],\n): Promise<GetLeanProductVariantsReturnType> {\n const queryGql = gql`#graphql\n query leanProductVariants($first: Int!, $after: String, $queryFilter: String) {\n productVariants(first: $first, after: $after, query: $queryFilter) {\n edges {\n node { \n id\n title\n sku\n product {\n id\n title\n }\n }\n }\n pageInfo { \n hasNextPage\n endCursor\n }\n }\n }\n `\n\n const initialVariables: LeanProductVariantsQueryVariables = { first: 250 }\n if (skus && skus.length > 0) {\n initialVariables.queryFilter = skus\n .map((sku: string) => `sku:${sku}`)\n .join(' OR ')\n }\n\n // Type for a single node from the productVariants query\n type SingleNode = NonNullable<\n NonNullable<\n LeanProductVariantsQuery['productVariants']\n >['edges'][number]['node']\n >\n\n const extractedNodes = await fetchShopifyGraphql<\n SingleNode,\n LeanProductVariantsQuery\n >({\n query: queryGql,\n variables: initialVariables,\n dataExtractor: (pageData: LeanProductVariantsQuery) => {\n if (!pageData.productVariants) {\n throw new Error(\n \"GraphQL response for product variants is missing the 'productVariants' field.\",\n )\n }\n const nodes: SingleNode[] = pageData.productVariants.edges.map(\n (edge: { node: SingleNode }) => edge.node,\n )\n return {\n nodes,\n pageInfo: pageData.productVariants.pageInfo,\n }\n },\n fetchAllPages: true,\n })\n\n const allVariants = extractedNodes.flatMap<\n GetLeanProductVariantsReturnType[number]\n >((v) => {\n if (v.sku) {\n return [\n {\n productId: v.product.id,\n productTitle: v.product.title,\n variantId: v.id,\n variantTitle: v.title,\n sku: v.sku,\n },\n ]\n }\n logger.debug(\n `Product ${v.product.title} (ID: ${v.product.id}) has a variant (ID: ${v.id}) with no SKU. Filtering out.`,\n )\n return []\n })\n\n return await returnOutputParsed(allVariants, GetLeanProductVariantsReturn)\n}\n"],"mappings":";AAAA,OAAOA,QAAO;;;ACAd,IAAM,EAAE,IAAI,IAAI;AAET,IAAM,MAAM,OAAO;AAE1B,IAAM,YAAY;AAAA,EAChB,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AACT;AAIA,SAAS,YACP,SACA,aACc;AACd,MAAI,eAAe,eAAe,WAAW;AAC3C,WAAO;AAAA,EACT;AAEA,MAAI,YAAY,QAAQ;AACtB,WAAO;AAAA,EACT;AAEA,MAAI,YAAY,cAAc;AAC5B,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,IAAM,qBAAqB,YAAY,IAAI,UAAU,IAAI,SAAS;AACzE,IAAM,sBAAsB,UAAU,kBAAkB;AAEjD,IAAM,SAAS;AAAA,EACpB,OAAO,IAAI,SAAoB;AAC7B,QAAI,UAAU,SAAS,qBAAqB;AAE1C,cAAQ,MAAM,GAAG,IAAI;AAAA,IACvB;AAAA,EACF;AAAA,EACA,MAAM,IAAI,SAAoB;AAC5B,QAAI,UAAU,QAAQ,qBAAqB;AAEzC,cAAQ,KAAK,GAAG,IAAI;AAAA,IACtB;AAAA,EACF;AAAA,EACA,MAAM,IAAI,SAAoB;AAC5B,QAAI,UAAU,QAAQ,qBAAqB;AAEzC,cAAQ,KAAK,GAAG,IAAI;AAAA,IACtB;AAAA,EACF;AAAA,EACA,OAAO,IAAI,SAAoB;AAC7B,QAAI,UAAU,SAAS,qBAAqB;AAE1C,cAAQ,MAAM,GAAG,IAAI;AAAA,IACvB;AAAA,EACF;AACF;;;AC5DA;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,OAAO;AACP,OAAO,YAAY;AACnB,SAAS,SAAS;AAIX,IAAM,sBAAsB,WAAW;AAE9C,OAAO,OAAO;AAEd,IAAM,YAAY,EAAE,OAAO;AAAA,EACzB,iBAAiB,EAAE,OAAO;AAAA,IACxB,OAAO,OAAO,EAAE,SAAS,8BAA8B;AAAA,EACzD,CAAC;AAAA,EACD,oBAAoB,EAAE,OAAO;AAAA,IAC3B,OAAO,OAAO,EAAE,SAAS,iCAAiC;AAAA,EAC5D,CAAC;AAAA,EACD,sBAAsB,EAAE,OAAO;AAAA,IAC7B,OAAO,OAAO,EAAE,SAAS,mCAAmC;AAAA,EAC9D,CAAC;AAAA,EACD,sBAAsB,EAAE,OAAO;AAAA,IAC7B,OAAO,OAAO,EAAE,SAAS,mCAAmC;AAAA,EAC9D,CAAC;AAAA,EACD,UAAU,EACP,KAAK,CAAC,eAAe,cAAc,MAAM,CAAC,EAC1C,QAAQ,aAAa;AAC1B,CAAC;AAED,IAAM,+BAA+B,CAAC,UAA+B;AACnE,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO,YAAY;AAAA,IACrB,KAAK;AACH,aAAO,YAAY;AAAA,IACrB,KAAK;AACH,aAAO,YAAY;AAAA,IACrB,KAAK;AACH,aAAO,YAAY;AAAA,IACrB,KAAK;AACH,aAAO,YAAY;AAAA,IACrB;AACE,aAAO,YAAY;AAAA,EACvB;AACF;AAEA,IAAI;AAEJ,IAAI;AAEF,QAAMC,OAAM,UAAU,MAAM,QAAQ,GAAG;AAEvC,QAAM,UAAU,WAAW;AAAA,IACzB,QAAQA,KAAI;AAAA,IACZ,cAAcA,KAAI;AAAA,IAClB,UAAUA,KAAI;AAAA,IACd,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ,EAAE,OAAO,6BAA6B,kBAAkB,EAAE;AAAA,IAClE,QAAQ;AAAA,MACN,2BAA2B;AAAA,MAC3B,iBAAiB;AAAA,MACjB,gCAAgC;AAAA,IAClC;AAAA,EACF,CAAC;AAED,QAAM,iBAAiB,IAAI,QAAQ;AAAA,IACjC,IAAI,kBAAkBA,KAAI,oBAAoB;AAAA,IAC9C,MAAMA,KAAI;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAaA,KAAI;AAAA,EACnB,CAAC;AAED,yBAAuB,IAAI,QAAQ,QAAQ,QAAQ;AAAA,IACjD,SAAS;AAAA,EACX,CAAC;AAED,SAAO,KAAK,8CAA8C;AAC5D,SAAS,OAAO;AACd,MAAI,iBAAiB,EAAE,UAAU;AAC/B,UAAM,MAAM,EAAE,cAAc,KAAK;AACjC,WAAO,MAAM,GAAG;AAAA,EAClB,OAAO;AACL,WAAO,MAAM,4CAA4C,KAAK;AAAA,EAChE;AACA,QAAM;AACR;;;ACzEA,eAAsB,oBAA4C,QASvC;AACzB,QAAM;AAAA,IACJ;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA,gBAAgB;AAAA,EAClB,IAAI;AAEJ,QAAM,WAA0B,CAAC;AACjC,MAAI,mBAAmB,EAAE,GAAG,iBAAiB;AAC7C,MAAI,cAAc;AAMlB,KAAG;AACD,UAAM,WAAY,MAAM,qBAAc,QAAmB,OAAO;AAAA,MAC9D,WAAW;AAAA,IACb,CAAC;AAED,QAAI,SAAS,QAAQ;AACnB,UAAI,gBAAgB;AACpB,YAAM,SAAS,SAAS;AACxB,UAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,wBAAgB,OACb,IAAI,CAAC,MAA+B,EAAE,WAAW,KAAK,UAAU,CAAC,CAAC,EAClE,KAAK,IAAI;AAAA,MACd,WACE,OAAO,WAAW,YAClB,WAAW,QACX,aAAa,QACb;AACA,wBAAgB,OAAO,WAAW,KAAK,UAAU,MAAM;AAAA,MACzD,WAAW,OAAO,WAAW,UAAU;AACrC,wBAAgB;AAAA,MAClB,OAAO;AACL,wBAAgB,KAAK,UAAU,MAAM;AAAA,MACvC;AACA,aAAO,MAAM,yBAAyB,aAAa;AACnD,YAAM,IAAI,MAAM,mBAAmB,aAAa,EAAE;AAAA,IACpD;AAEA,QAAI,CAAC,SAAS,MAAM;AAClB,YAAM,IAAI,MAAM,iCAAiC;AAAA,IACnD;AAEA,UAAM,EAAE,OAAO,UAAU,WAAW,IAAI,cAAc,SAAS,IAAI;AAGnE,QAAI,MAAM,QAAQ,UAAU,KAAK,WAAW,SAAS,GAAG;AACtD,YAAM,gBAAgB,WACnB,IAAI,CAAC,MAAM,EAAE,WAAW,KAAK,UAAU,CAAC,CAAC,EACzC,KAAK,IAAI;AACZ,aAAO,MAAM,gCAAgC,aAAa;AAC1D,YAAM,IAAI,MAAM,gCAAgC,aAAa,EAAE;AAAA,IACjE;AAEA,aAAS,KAAK,GAAG,KAAK;AAEtB,kBAAc,gBAAgB,CAAC,CAAC,UAAU,cAAc;AACxD,QAAI,eAAe,UAAU,WAAW;AACtC,yBAAmB;AAAA,QACjB,GAAG;AAAA,QACH,OAAO,SAAS;AAAA,MAClB;AAAA,IACF;AAAA,EACF,SAAS;AAET,SAAO;AACT;;;ACnGA,OAAOC,QAAO;AAGd,eAAsB,mBACpB,MACA,OACA;AACA,QAAM,SAAS,MAAM,MAAM,eAAe,IAAI;AAC9C,MAAI,CAAC,OAAO,SAAS;AACnB,QAAI,OAAO,iBAAiBC,GAAE,UAAU;AACtC,YAAM,MAAMA,GAAE,cAAc,OAAO,KAAK;AACxC,aAAO,MAAM,GAAG;AAAA,IAClB,OAAO;AACL,aAAO,MAAM,oBAAoB,OAAO,KAAK;AAAA,IAC/C;AAEA,UAAM,IAAI,MAAM,kCAAkC;AAAA,EACpD;AACA,SAAO,KAAK,0BAA0B;AACtC,SAAO,OAAO;AAChB;;;AClBO,IAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoC1B,IAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ALxBrC,IAAM,2BAA2BC,GAC9B,OAAO;AAAA,EACN,IAAIA,GAAE,OAAO;AAAA,EACb,MAAMA,GAAE,OAAO;AAAA,EACf,WAAWA,GAAE,OAAO;AAAA,EACpB,WAAWA,GAAE,OAAO;AAAA,EACpB,YAAYA,GAAE,OAAO;AAAA,IACnB,QAAQA,GAAE,OAAO;AAAA,IACjB,cAAcA,GAAE,OAAO;AAAA,EACzB,CAAC;AAAA,EACD,UAAUA,GACP,OAAO;AAAA,IACN,IAAIA,GAAE,OAAO;AAAA,IACb,aAAaA,GAAE,OAAO;AAAA,IACtB,cAAcA,GAAE,OAAO,EAAE,SAAS;AAAA,EACpC,CAAC,EACA,SAAS;AAAA,EACZ,iBAAiBA,GAAE,OAAO,EAAE,SAAS;AAAA,EACrC,mBAAmBA,GAAE,OAAO,EAAE,SAAS;AACzC,CAAC,EACA,SAAS;AAgCZ,eAAsB,eACpB,WACA,cAAgC,QACsC;AACtE,MAAI,gBAAgB,QAAQ;AAC1B,WAAO,mBAAmB,SAAS;AAAA,EACrC;AACA,SAAO,mBAAmB,SAAS;AACrC;AAEA,eAAe,mBACb,WACuC;AACvC,QAAM,YAAwC;AAAA,IAC5C,OAAO;AAAA,IACP,aAAa,QAAQ,SAAS;AAAA,EAChC;AAMA,QAAM,iBAAiB,MAAM,oBAG3B;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,eAAe,CAAC,aAAgC;AAC9C,UAAI,CAAC,SAAS,QAAQ;AACpB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,YAAM,QAAsB,SAAS,OAAO,MAAM;AAAA,QAChD,CAAC,SAA+B,KAAK;AAAA,MACvC;AACA,aAAO;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA,IACA,eAAe;AAAA,EACjB,CAAC;AAED,QAAM,QAAQ,eAAe,CAAC;AAC9B,MAAI,CAAC,OAAO;AACV,WAAO,MAAM,6BAA6B,SAAS,EAAE;AACrD,WAAO;AAAA,EACT;AAEA,QAAM,YAAY;AAAA,IAChB,IAAI,MAAM;AAAA,IACV,MAAM,MAAM;AAAA,IACZ,WAAW,MAAM;AAAA,IACjB,WAAW,MAAM;AAAA,IACjB,YAAY;AAAA,MACV,QAAQ,MAAM,eAAe,WAAW,UAAU;AAAA,MAClD,cAAc,MAAM,eAAe,WAAW,gBAAgB;AAAA,IAChE;AAAA,IACA,UAAU,MAAM,WACZ;AAAA,MACE,IAAI,MAAM,SAAS;AAAA,MACnB,aAAa,MAAM,SAAS;AAAA,MAC5B,cACE,MAAM,SAAS,qBAAqB,gBAAgB;AAAA,IACxD,IACA;AAAA,IACJ,iBAAiB,MAAM,0BAA0B;AAAA,IACjD,mBAAmB,MAAM,4BAA4B;AAAA,EACvD;AAEA,SAAO,MAAM,mBAAmB,WAAW,wBAAwB;AACrE;AAEA,eAAe,mBACb,WACuC;AACvC,QAAM,YAAwC;AAAA,IAC5C,OAAO;AAAA,IACP,aAAa,QAAQ,SAAS;AAAA,EAChC;AAMA,QAAM,iBAAiB,MAAM,oBAG3B;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,eAAe,CAAC,aAAoC;AAClD,UAAI,CAAC,SAAS,QAAQ;AACpB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,YAAM,QAAsB,SAAS,OAAO,MAAM;AAAA,QAChD,CAAC,SAA+B,KAAK;AAAA,MACvC;AACA,aAAO;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA,IACA,eAAe;AAAA,EACjB,CAAC;AAED,MAAI,eAAe,WAAW,GAAG;AAC/B,WAAO,MAAM,6BAA6B,SAAS,EAAE;AACrD,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,eAAe,CAAC;AAC9B,MAAI,CAAC,OAAO;AACV,WAAO,MAAM,6BAA6B,SAAS,EAAE;AACrD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;;;AM1LA,OAAOC,QAAO;AASd,IAAM,+BAA+BC,GAAE;AAAA,EACrCA,GAAE,OAAO;AAAA,IACP,WAAWA,GAAE,OAAO;AAAA,IACpB,cAAcA,GAAE,OAAO;AAAA,IACvB,WAAWA,GAAE,OAAO;AAAA,IACpB,cAAcA,GAAE,OAAO;AAAA,IACvB,KAAKA,GAAE,OAAO;AAAA,EAChB,CAAC;AACH;AAeA,eAAsB,uBACpB,MAC2C;AAC3C,QAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBjB,QAAM,mBAAsD,EAAE,OAAO,IAAI;AACzE,MAAI,QAAQ,KAAK,SAAS,GAAG;AAC3B,qBAAiB,cAAc,KAC5B,IAAI,CAAC,QAAgB,OAAO,GAAG,EAAE,EACjC,KAAK,MAAM;AAAA,EAChB;AASA,QAAM,iBAAiB,MAAM,oBAG3B;AAAA,IACA,OAAO;AAAA,IACP,WAAW;AAAA,IACX,eAAe,CAAC,aAAuC;AACrD,UAAI,CAAC,SAAS,iBAAiB;AAC7B,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,YAAM,QAAsB,SAAS,gBAAgB,MAAM;AAAA,QACzD,CAAC,SAA+B,KAAK;AAAA,MACvC;AACA,aAAO;AAAA,QACL;AAAA,QACA,UAAU,SAAS,gBAAgB;AAAA,MACrC;AAAA,IACF;AAAA,IACA,eAAe;AAAA,EACjB,CAAC;AAED,QAAM,cAAc,eAAe,QAEjC,CAAC,MAAM;AACP,QAAI,EAAE,KAAK;AACT,aAAO;AAAA,QACL;AAAA,UACE,WAAW,EAAE,QAAQ;AAAA,UACrB,cAAc,EAAE,QAAQ;AAAA,UACxB,WAAW,EAAE;AAAA,UACb,cAAc,EAAE;AAAA,UAChB,KAAK,EAAE;AAAA,QACT;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,MACL,WAAW,EAAE,QAAQ,KAAK,SAAS,EAAE,QAAQ,EAAE,wBAAwB,EAAE,EAAE;AAAA,IAC7E;AACA,WAAO,CAAC;AAAA,EACV,CAAC;AAED,SAAO,MAAM,mBAAmB,aAAa,4BAA4B;AAC3E;","names":["z","env","z","z","z","z","z"]}
@@ -0,0 +1,4 @@
1
+ import z from 'zod';
2
+ export declare const ConnectMetaObjectToProductVariantReturn: z.ZodArray<z.ZodString>;
3
+ export declare function connectMetaObjectToProductVariant(productId: string, variantId: string, metaObjectId: string, metaObjectKey: string): Promise<z.infer<typeof ConnectMetaObjectToProductVariantReturn>>;
4
+ //# sourceMappingURL=connectMetaObjectToProductVariant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectMetaObjectToProductVariant.d.ts","sourceRoot":"","sources":["../../../src/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AASnB,eAAO,MAAM,uCAAuC,yBAAsB,CAAA;AAS1E,wBAAsB,iCAAiC,CACrD,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,uCAAuC,CAAC,CAAC,CA4DlE"}
@@ -0,0 +1,56 @@
1
+ import z from 'zod';
2
+ import { gql } from '../../utils/logger';
3
+ import { fetchShopifyGraphql } from '../../utils/shopifyFetch';
4
+ import { returnOutputParsed } from '../../utils/zod';
5
+ export const ConnectMetaObjectToProductVariantReturn = z.array(z.string());
6
+ export async function connectMetaObjectToProductVariant(productId, variantId, metaObjectId, metaObjectKey) {
7
+ const mutation = gql `#graphql
8
+ mutation connectMetaObjectToProductVariant($productId: ID!, $variantId: ID!, $metaObjectId: String!, $metaObjectKey: String!) {
9
+ productVariantsBulkUpdate(
10
+ productId: $productId
11
+ variants: [
12
+ {
13
+ id: $variantId
14
+ metafields: [
15
+ {
16
+ namespace: "custom"
17
+ key: $metaObjectKey
18
+ value: $metaObjectId
19
+ type: "metaobject_reference"
20
+ }
21
+ ]
22
+ }
23
+ ]
24
+ ) {
25
+ productVariants {
26
+ id
27
+ }
28
+ userErrors {
29
+ field
30
+ message
31
+ }
32
+ }
33
+ }
34
+ `;
35
+ const variables = {
36
+ productId,
37
+ variantId,
38
+ metaObjectId,
39
+ metaObjectKey,
40
+ };
41
+ const response = await fetchShopifyGraphql({
42
+ query: mutation,
43
+ variables,
44
+ dataExtractor: (data) => {
45
+ if (!data.productVariantsBulkUpdate) {
46
+ throw new Error("GraphQL response for product variants bulk update is missing the 'productVariantsBulkUpdate' field.");
47
+ }
48
+ return {
49
+ nodes: data.productVariantsBulkUpdate.productVariants || [],
50
+ userErrors: data.productVariantsBulkUpdate.userErrors,
51
+ };
52
+ },
53
+ });
54
+ return returnOutputParsed(response.map((item) => item.id), ConnectMetaObjectToProductVariantReturn);
55
+ }
56
+ //# sourceMappingURL=connectMetaObjectToProductVariant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectMetaObjectToProductVariant.js","sourceRoot":"","sources":["../../../src/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAKnB,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEpD,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;AAS1E,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,SAAiB,EACjB,SAAiB,EACjB,YAAoB,EACpB,aAAqB;IAErB,MAAM,QAAQ,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BnB,CAAA;IAED,MAAM,SAAS,GAAuD;QACpE,SAAS;QACT,SAAS;QACT,YAAY;QACZ,aAAa;KACd,CAAA;IAED,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAGxC;QACA,KAAK,EAAE,QAAQ;QACf,SAAS;QACT,aAAa,EAAE,CAAC,IAA+C,EAAE,EAAE;YACjE,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACb,qGAAqG,CACtG,CAAA;YACH,CAAC;YACD,OAAO;gBACL,KAAK,EAAE,IAAI,CAAC,yBAAyB,CAAC,eAAe,IAAI,EAAE;gBAC3D,UAAU,EAAE,IAAI,CAAC,yBAAyB,CAAC,UAAU;aACtD,CAAA;QACH,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,kBAAkB,CACvB,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAC/B,uCAAuC,CACxC,CAAA;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ConnectMetaObjectToProductVariantMutation } from '../../generated-api-types/2025-04/admin.generated';
2
+ export declare const connectMetaObjectToProductVariantMock: ConnectMetaObjectToProductVariantMutation;
3
+ //# sourceMappingURL=connectMetaObjectToProductVariant.mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectMetaObjectToProductVariant.mock.d.ts","sourceRoot":"","sources":["../../../src/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yCAAyC,EAAE,MAAM,mDAAmD,CAAA;AAElH,eAAO,MAAM,qCAAqC,EAAE,yCAUjD,CAAA"}
@@ -0,0 +1,11 @@
1
+ export const connectMetaObjectToProductVariantMock = {
2
+ productVariantsBulkUpdate: {
3
+ productVariants: [
4
+ {
5
+ id: 'gid://shopify/ProductVariant/1',
6
+ },
7
+ ],
8
+ userErrors: [],
9
+ },
10
+ };
11
+ //# sourceMappingURL=connectMetaObjectToProductVariant.mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectMetaObjectToProductVariant.mock.js","sourceRoot":"","sources":["../../../src/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qCAAqC,GAChD;IACE,yBAAyB,EAAE;QACzB,eAAe,EAAE;YACf;gBACE,EAAE,EAAE,gCAAgC;aACrC;SACF;QACD,UAAU,EAAE,EAAE;KACf;CACF,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=connectMetaObjectToProductVariant.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectMetaObjectToProductVariant.test.d.ts","sourceRoot":"","sources":["../../../src/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { connectMetaObjectToProductVariant } from './connectMetaObjectToProductVariant';
3
+ import { connectMetaObjectToProductVariantMock } from './connectMetaObjectToProductVariant.mock';
4
+ describe('productVariantsBulkUpdate', () => {
5
+ const expectedResult = connectMetaObjectToProductVariantMock.productVariantsBulkUpdate?.productVariants?.map((variant) => variant.id);
6
+ it('connect meta object to product (variant)', async () => {
7
+ const actualResult = await connectMetaObjectToProductVariant('gid://shopify/Product/test', 'gid://shopify/ProductVariant/test', 'gid://shopify/Metaobject/test', 'erpnext_content_configuration');
8
+ expect(actualResult).toEqual(expectedResult);
9
+ });
10
+ });
11
+ //# sourceMappingURL=connectMetaObjectToProductVariant.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectMetaObjectToProductVariant.test.js","sourceRoot":"","sources":["../../../src/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAA;AACvF,OAAO,EAAE,qCAAqC,EAAE,MAAM,0CAA0C,CAAA;AAEhG,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,MAAM,cAAc,GAClB,qCAAqC,CAAC,yBAAyB,EAAE,eAAe,EAAE,GAAG,CACnF,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CACxB,CAAA;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,YAAY,GAAG,MAAM,iCAAiC,CAC1D,4BAA4B,EAC5B,mCAAmC,EACnC,+BAA+B,EAC/B,+BAA+B,CAChC,CAAA;QACD,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,26 @@
1
+ import z from 'zod';
2
+ import type { OrdersByNameFullQuery } from '../../generated-api-types/2025-04/admin.generated.js';
3
+ declare const GetLeanOrderByNameReturn: z.ZodNullable<z.ZodObject<{
4
+ id: z.ZodString;
5
+ name: z.ZodString;
6
+ createdAt: z.ZodString;
7
+ updatedAt: z.ZodString;
8
+ totalPrice: z.ZodObject<{
9
+ amount: z.ZodString;
10
+ currencyCode: z.ZodString;
11
+ }, {}, {}>;
12
+ customer: z.ZodNullable<z.ZodObject<{
13
+ id: z.ZodString;
14
+ displayName: z.ZodString;
15
+ emailAddress: z.ZodNullable<z.ZodString>;
16
+ }, {}, {}>>;
17
+ financialStatus: z.ZodNullable<z.ZodString>;
18
+ fulfillmentStatus: z.ZodNullable<z.ZodString>;
19
+ }, {}, {}>>;
20
+ type GetLeanOrderByNameReturnType = z.infer<typeof GetLeanOrderByNameReturn>;
21
+ type GetFullOrderByNameReturnType = NonNullable<NonNullable<OrdersByNameFullQuery['orders']>['edges'][number]['node']> | null;
22
+ export declare function getOrderByName(orderName: string, detailLevel: 'lean'): Promise<GetLeanOrderByNameReturnType>;
23
+ export declare function getOrderByName(orderName: string, detailLevel: 'full'): Promise<GetFullOrderByNameReturnType>;
24
+ export declare function getOrderByName(orderName: string): Promise<GetLeanOrderByNameReturnType>;
25
+ export {};
26
+ //# sourceMappingURL=getOrderByName.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOrderByName.d.ts","sourceRoot":"","sources":["../../../src/queries/orders/getOrderByName.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AACnB,OAAO,KAAK,EACV,qBAAqB,EAGtB,MAAM,sDAAsD,CAAA;AAS7D,QAAA,MAAM,wBAAwB;;;;;;;;;;;;;;;;WAoBjB,CAAA;AAEb,KAAK,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAE5E,KAAK,4BAA4B,GAAG,WAAW,CAC7C,WAAW,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CACtE,GAAG,IAAI,CAAA;AAKR,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,4BAA4B,CAAC,CAAA;AACxC,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,4BAA4B,CAAC,CAAA;AACxC,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,4BAA4B,CAAC,CAAA"}
@@ -0,0 +1,117 @@
1
+ import z from 'zod';
2
+ import { logger } from '../../utils/logger.js';
3
+ import { fetchShopifyGraphql } from '../../utils/shopifyFetch.js';
4
+ import { returnOutputParsed } from '../../utils/zod.js';
5
+ import { queryOrdersByName, queryOrdersByNameFull, } from './getOrderByName.queries.js';
6
+ const GetLeanOrderByNameReturn = z
7
+ .object({
8
+ id: z.string(),
9
+ name: z.string(),
10
+ createdAt: z.string(),
11
+ updatedAt: z.string(),
12
+ totalPrice: z.object({
13
+ amount: z.string(),
14
+ currencyCode: z.string(),
15
+ }),
16
+ customer: z
17
+ .object({
18
+ id: z.string(),
19
+ displayName: z.string(),
20
+ emailAddress: z.string().nullable(),
21
+ })
22
+ .nullable(),
23
+ financialStatus: z.string().nullable(),
24
+ fulfillmentStatus: z.string().nullable(),
25
+ })
26
+ .nullable();
27
+ /**
28
+ * Retrieves a single order from Shopify by its order name (e.g., "B12345").
29
+ * Returns null if no order is found with the specified name.
30
+ *
31
+ * @param {string} orderName - The order name to search for (e.g., "B12345").
32
+ * @param {OrderDetailLevel} detailLevel - The level of detail to return ('lean' or 'full'). Defaults to 'lean'.
33
+ * @returns {Promise<GetLeanOrderByNameReturnType | GetFullOrderByNameReturnType>} A promise that resolves to the order data or null if not found.
34
+ * @throws {Error} If the GraphQL query fails or if the response structure is invalid.
35
+ */
36
+ export async function getOrderByName(orderName, detailLevel = 'lean') {
37
+ if (detailLevel === 'lean') {
38
+ return getLeanOrderByName(orderName);
39
+ }
40
+ return getFullOrderByName(orderName);
41
+ }
42
+ async function getLeanOrderByName(orderName) {
43
+ const variables = {
44
+ first: 1,
45
+ queryFilter: `name:${orderName}`,
46
+ };
47
+ const extractedNodes = await fetchShopifyGraphql({
48
+ query: queryOrdersByName,
49
+ variables,
50
+ dataExtractor: (pageData) => {
51
+ if (!pageData.orders) {
52
+ throw new Error("GraphQL response for orders is missing the 'orders' field.");
53
+ }
54
+ const nodes = pageData.orders.edges.map((edge) => edge.node);
55
+ return {
56
+ nodes,
57
+ };
58
+ },
59
+ fetchAllPages: false,
60
+ });
61
+ const order = extractedNodes[0];
62
+ if (!order) {
63
+ logger.debug(`No order found with name: ${orderName}`);
64
+ return null;
65
+ }
66
+ const leanOrder = {
67
+ id: order.id,
68
+ name: order.name,
69
+ createdAt: order.createdAt,
70
+ updatedAt: order.updatedAt,
71
+ totalPrice: {
72
+ amount: order.totalPriceSet?.shopMoney?.amount ?? '',
73
+ currencyCode: order.totalPriceSet?.shopMoney?.currencyCode ?? '',
74
+ },
75
+ customer: order.customer
76
+ ? {
77
+ id: order.customer.id,
78
+ displayName: order.customer.displayName,
79
+ emailAddress: order.customer.defaultEmailAddress?.emailAddress ?? null,
80
+ }
81
+ : null,
82
+ financialStatus: order.displayFinancialStatus ?? null,
83
+ fulfillmentStatus: order.displayFulfillmentStatus ?? null,
84
+ };
85
+ return await returnOutputParsed(leanOrder, GetLeanOrderByNameReturn);
86
+ }
87
+ async function getFullOrderByName(orderName) {
88
+ const variables = {
89
+ first: 1,
90
+ queryFilter: `name:${orderName}`,
91
+ };
92
+ const extractedNodes = await fetchShopifyGraphql({
93
+ query: queryOrdersByNameFull,
94
+ variables,
95
+ dataExtractor: (pageData) => {
96
+ if (!pageData.orders) {
97
+ throw new Error("GraphQL response for orders is missing the 'orders' field.");
98
+ }
99
+ const nodes = pageData.orders.edges.map((edge) => edge.node);
100
+ return {
101
+ nodes,
102
+ };
103
+ },
104
+ fetchAllPages: false,
105
+ });
106
+ if (extractedNodes.length === 0) {
107
+ logger.debug(`No order found with name: ${orderName}`);
108
+ return null;
109
+ }
110
+ const order = extractedNodes[0];
111
+ if (!order) {
112
+ logger.debug(`No order found with name: ${orderName}`);
113
+ return null;
114
+ }
115
+ return order;
116
+ }
117
+ //# sourceMappingURL=getOrderByName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOrderByName.js","sourceRoot":"","sources":["../../../src/queries/orders/getOrderByName.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { OrdersByNameQuery } from '../../generated-api-types/2025-04/admin.generated';
2
+ import { CurrencyCode, OrderDisplayFulfillmentStatus } from '../../generated-api-types/2025-04/admin.types';
3
+ export declare const ordersByNameMock: OrdersByNameQuery;
4
+ export declare const expectedLeanOrder: {
5
+ id: string;
6
+ name: string;
7
+ createdAt: string;
8
+ updatedAt: string;
9
+ totalPrice: {
10
+ amount: string;
11
+ currencyCode: CurrencyCode;
12
+ };
13
+ customer: {
14
+ id: string;
15
+ displayName: string;
16
+ emailAddress: string;
17
+ };
18
+ financialStatus: null;
19
+ fulfillmentStatus: OrderDisplayFulfillmentStatus;
20
+ };
21
+ //# sourceMappingURL=getOrderByName.mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOrderByName.mock.d.ts","sourceRoot":"","sources":["../../../src/queries/orders/getOrderByName.mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mDAAmD,CAAA;AAC1F,OAAO,EACL,YAAY,EACZ,6BAA6B,EAC9B,MAAM,+CAA+C,CAAA;AA0BtD,eAAO,MAAM,gBAAgB,EAAE,iBAY9B,CAAA;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;CAgB7B,CAAA"}
@@ -0,0 +1,55 @@
1
+ import { CurrencyCode, OrderDisplayFulfillmentStatus, } from '../../generated-api-types/2025-04/admin.types';
2
+ const order = {
3
+ id: 'gid://shopify/Order/12345',
4
+ name: 'B12345',
5
+ createdAt: '2024-01-15T10:30:00Z',
6
+ updatedAt: '2024-01-15T14:45:00Z',
7
+ totalPriceSet: {
8
+ shopMoney: {
9
+ amount: '99.99',
10
+ currencyCode: CurrencyCode.Usd,
11
+ },
12
+ },
13
+ customer: {
14
+ id: 'gid://shopify/Customer/67890',
15
+ displayName: 'John Doe',
16
+ firstName: 'John',
17
+ lastName: 'Doe',
18
+ defaultEmailAddress: {
19
+ emailAddress: 'john.doe@example.com',
20
+ },
21
+ },
22
+ displayFulfillmentStatus: OrderDisplayFulfillmentStatus.Fulfilled,
23
+ displayFinancialStatus: null,
24
+ };
25
+ export const ordersByNameMock = {
26
+ orders: {
27
+ edges: [
28
+ {
29
+ node: order,
30
+ },
31
+ ],
32
+ pageInfo: {
33
+ hasNextPage: false,
34
+ endCursor: 'eyJsYXN0X2lkIjoxMjM0NX0=',
35
+ },
36
+ },
37
+ };
38
+ export const expectedLeanOrder = {
39
+ id: order.id,
40
+ name: order.name,
41
+ createdAt: order.createdAt,
42
+ updatedAt: order.updatedAt,
43
+ totalPrice: {
44
+ amount: order.totalPriceSet.shopMoney.amount,
45
+ currencyCode: order.totalPriceSet.shopMoney.currencyCode,
46
+ },
47
+ customer: {
48
+ id: order.customer.id,
49
+ displayName: order.customer.displayName,
50
+ emailAddress: order.customer.defaultEmailAddress.emailAddress,
51
+ },
52
+ financialStatus: order.displayFinancialStatus,
53
+ fulfillmentStatus: order.displayFulfillmentStatus,
54
+ };
55
+ //# sourceMappingURL=getOrderByName.mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOrderByName.mock.js","sourceRoot":"","sources":["../../../src/queries/orders/getOrderByName.mock.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,6BAA6B,GAC9B,MAAM,+CAA+C,CAAA;AAEtD,MAAM,KAAK,GAAG;IACZ,EAAE,EAAE,2BAA2B;IAC/B,IAAI,EAAE,QAAQ;IACd,SAAS,EAAE,sBAAsB;IACjC,SAAS,EAAE,sBAAsB;IACjC,aAAa,EAAE;QACb,SAAS,EAAE;YACT,MAAM,EAAE,OAAO;YACf,YAAY,EAAE,YAAY,CAAC,GAAG;SAC/B;KACF;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,8BAA8B;QAClC,WAAW,EAAE,UAAU;QACvB,SAAS,EAAE,MAAM;QACjB,QAAQ,EAAE,KAAK;QACf,mBAAmB,EAAE;YACnB,YAAY,EAAE,sBAAsB;SACrC;KACF;IACD,wBAAwB,EAAE,6BAA6B,CAAC,SAAS;IACjE,sBAAsB,EAAE,IAAI;CAC7B,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IACjD,MAAM,EAAE;QACN,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,KAAK;aACZ;SACF;QACD,QAAQ,EAAE;YACR,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,0BAA0B;SACtC;KACF;CACF,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,EAAE,EAAE,KAAK,CAAC,EAAE;IACZ,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,SAAS,EAAE,KAAK,CAAC,SAAS;IAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;IAC1B,UAAU,EAAE;QACV,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM;QAC5C,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,YAAY;KACzD;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE;QACrB,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW;QACvC,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,YAAY;KAC9D;IACD,eAAe,EAAE,KAAK,CAAC,sBAAsB;IAC7C,iBAAiB,EAAE,KAAK,CAAC,wBAAwB;CAClD,CAAA"}
@@ -0,0 +1,3 @@
1
+ export declare const queryOrdersByName: string;
2
+ export declare const queryOrdersByNameFull: string;
3
+ //# sourceMappingURL=getOrderByName.queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOrderByName.queries.d.ts","sourceRoot":"","sources":["../../../src/queries/orders/getOrderByName.queries.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,QAkC7B,CAAA;AAED,eAAO,MAAM,qBAAqB,QAySjC,CAAA"}