{"version":3,"file":"useCartAPIStateMachine.mjs","names":[],"sources":["../../src/useCartAPIStateMachine.tsx"],"sourcesContent":["import {useMachine} from './useMachine.js';\nimport {createMachine, assign, StateMachine} from '@xstate/fsm';\nimport {\n  Cart,\n  CartMachineActionEvent,\n  CartMachineActions,\n  CartMachineContext,\n  CartMachineEvent,\n  CartMachineFetchResultEvent,\n  CartMachineTypeState,\n} from './cart-types.js';\nimport {flattenConnection} from './flatten-connection.js';\nimport {useCartActions} from './useCartActions.js';\nimport {useMemo} from 'react';\nimport {InitEvent} from '@xstate/fsm/lib/types.js';\nimport {\n  CountryCode,\n  Cart as CartType,\n  LanguageCode,\n} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\n\nfunction invokeCart(\n  action: keyof CartMachineActions,\n  options?: {\n    entryActions?: [keyof CartMachineActions];\n    resolveTarget?: CartMachineTypeState['value'];\n    errorTarget?: CartMachineTypeState['value'];\n    exitActions?: [keyof CartMachineActions];\n  },\n): StateMachine.Config<CartMachineContext, CartMachineEvent>['states']['on'] {\n  return {\n    entry: [\n      ...(options?.entryActions || []),\n      assign({\n        lastValidCart: (context) => context?.cart,\n      }),\n      'onCartActionEntry',\n      'onCartActionOptimisticUI',\n      action,\n    ],\n    on: {\n      RESOLVE: {\n        target: options?.resolveTarget || 'idle',\n        actions: [\n          assign({\n            prevCart: (context) => context?.lastValidCart,\n            cart: (_, event) => event?.payload?.cart,\n            rawCartResult: (_, event) => event?.payload?.rawCartResult,\n            // eslint-disable-next-line @typescript-eslint/no-unused-vars\n            errors: (_) => undefined,\n          }),\n        ],\n      },\n      ERROR: {\n        target: options?.errorTarget || 'error',\n        actions: [\n          assign({\n            prevCart: (context) => context?.lastValidCart,\n            cart: (context) => context?.lastValidCart,\n            errors: (_, event) => event?.payload?.errors,\n          }),\n        ],\n      },\n      CART_COMPLETED: {\n        target: 'cartCompleted',\n        actions: assign({\n          // eslint-disable-next-line @typescript-eslint/no-unused-vars\n          prevCart: (_) => undefined,\n          // eslint-disable-next-line @typescript-eslint/no-unused-vars\n          cart: (_) => undefined,\n          // eslint-disable-next-line @typescript-eslint/no-unused-vars\n          lastValidCart: (_) => undefined,\n          // eslint-disable-next-line @typescript-eslint/no-unused-vars\n          rawCartResult: (_) => undefined,\n          // eslint-disable-next-line @typescript-eslint/no-unused-vars\n          errors: (_) => undefined,\n        }),\n      },\n    },\n    exit: ['onCartActionComplete', ...(options?.exitActions || [])],\n  };\n}\n\nconst INITIALIZING_CART_EVENTS: StateMachine.Machine<\n  CartMachineContext,\n  CartMachineEvent,\n  CartMachineTypeState\n>['config']['states']['uninitialized']['on'] = {\n  CART_FETCH: {\n    target: 'cartFetching',\n  },\n  CART_CREATE: {\n    target: 'cartCreating',\n  },\n  CART_SET: {\n    target: 'idle',\n    actions: [\n      assign({\n        rawCartResult: (_, event) => event.payload.cart,\n        cart: (_, event) => cartFromGraphQL(event.payload.cart),\n      }),\n    ],\n  },\n};\n\nconst UPDATING_CART_EVENTS: StateMachine.Machine<\n  CartMachineContext,\n  CartMachineEvent,\n  CartMachineTypeState\n>['config']['states']['idle']['on'] = {\n  CARTLINE_ADD: {\n    target: 'cartLineAdding',\n  },\n  CARTLINE_UPDATE: {\n    target: 'cartLineUpdating',\n  },\n  CARTLINE_REMOVE: {\n    target: 'cartLineRemoving',\n  },\n  NOTE_UPDATE: {\n    target: 'noteUpdating',\n  },\n  BUYER_IDENTITY_UPDATE: {\n    target: 'buyerIdentityUpdating',\n  },\n  CART_ATTRIBUTES_UPDATE: {\n    target: 'cartAttributesUpdating',\n  },\n  DISCOUNT_CODES_UPDATE: {\n    target: 'discountCodesUpdating',\n  },\n};\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nfunction createCartMachine(\n  initialCart?: PartialDeep<CartType, {recurseIntoArrays: true}>,\n) {\n  return createMachine<\n    CartMachineContext,\n    CartMachineEvent,\n    CartMachineTypeState\n  >({\n    id: 'Cart',\n    initial: initialCart ? 'idle' : 'uninitialized',\n    context: {\n      cart: initialCart && cartFromGraphQL(initialCart),\n    },\n    states: {\n      uninitialized: {\n        on: INITIALIZING_CART_EVENTS,\n      },\n      cartCompleted: {\n        on: INITIALIZING_CART_EVENTS,\n      },\n      initializationError: {\n        on: INITIALIZING_CART_EVENTS,\n      },\n      idle: {\n        on: {...INITIALIZING_CART_EVENTS, ...UPDATING_CART_EVENTS},\n      },\n      error: {\n        on: {...INITIALIZING_CART_EVENTS, ...UPDATING_CART_EVENTS},\n      },\n      cartFetching: invokeCart('cartFetchAction', {\n        errorTarget: 'initializationError',\n      }),\n      cartCreating: invokeCart('cartCreateAction', {\n        errorTarget: 'initializationError',\n      }),\n      cartLineRemoving: invokeCart('cartLineRemoveAction'),\n      cartLineUpdating: invokeCart('cartLineUpdateAction'),\n      cartLineAdding: invokeCart('cartLineAddAction'),\n      noteUpdating: invokeCart('noteUpdateAction'),\n      buyerIdentityUpdating: invokeCart('buyerIdentityUpdateAction'),\n      cartAttributesUpdating: invokeCart('cartAttributesUpdateAction'),\n      discountCodesUpdating: invokeCart('discountCodesUpdateAction'),\n    },\n  });\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function useCartAPIStateMachine({\n  numCartLines,\n  onCartActionEntry,\n  onCartActionOptimisticUI,\n  onCartActionComplete,\n  data: cart,\n  cartFragment,\n  countryCode,\n  languageCode,\n}: {\n  /**  Maximum number of cart lines to fetch. Defaults to 250 cart lines. */\n  numCartLines?: number;\n  /** A callback that is invoked just before a Cart API action executes. */\n  onCartActionEntry?: (\n    context: CartMachineContext,\n    event: CartMachineActionEvent,\n  ) => void;\n  /** A callback that is invoked after executing the entry actions for optimistic UI changes.  */\n  onCartActionOptimisticUI?: (\n    context: CartMachineContext,\n    event: CartMachineEvent,\n  ) => Partial<CartMachineContext>;\n  /** A callback that is invoked after a Cart API completes. */\n  onCartActionComplete?: (\n    context: CartMachineContext,\n    event: CartMachineFetchResultEvent,\n  ) => void;\n  /** An object with fields that correspond to the Storefront API's [Cart object](https://shopify.dev/api/storefront/2026-04/objects/cart). */\n  data?: PartialDeep<CartType, {recurseIntoArrays: true}>;\n  /** A fragment used to query the Storefront API's [Cart object](https://shopify.dev/api/storefront/2026-04/objects/cart) for all queries and mutations. A default value is used if no argument is provided. */\n  cartFragment: string;\n  /** The ISO country code for i18n. */\n  countryCode?: CountryCode;\n  /** The ISO language code for i18n. */\n  languageCode?: LanguageCode;\n}) {\n  const {\n    cartFetch,\n    cartCreate,\n    cartLineAdd,\n    cartLineUpdate,\n    cartLineRemove,\n    noteUpdate,\n    buyerIdentityUpdate,\n    cartAttributesUpdate,\n    discountCodesUpdate,\n  } = useCartActions({\n    numCartLines,\n    cartFragment,\n    countryCode,\n    languageCode,\n  });\n\n  const cartMachine = useMemo(() => createCartMachine(cart), [cart]);\n\n  const [state, send, service] = useMachine(cartMachine, {\n    actions: {\n      // eslint-disable-next-line @typescript-eslint/no-misused-promises\n      cartFetchAction: async (_, event) => {\n        if (event.type !== 'CART_FETCH') return;\n\n        const {data, errors} = await cartFetch(event?.payload?.cartId);\n        const resultEvent = eventFromFetchResult(event, data?.cart, errors);\n        send(resultEvent);\n      },\n      // eslint-disable-next-line @typescript-eslint/no-misused-promises\n      cartCreateAction: async (_, event) => {\n        if (event.type !== 'CART_CREATE') return;\n\n        const {data, errors} = await cartCreate(event?.payload);\n        const resultEvent = eventFromFetchResult(\n          event,\n          data?.cartCreate?.cart,\n          errors,\n        );\n        send(resultEvent);\n      },\n      // eslint-disable-next-line @typescript-eslint/no-misused-promises\n      cartLineAddAction: async (context, event) => {\n        if (event.type !== 'CARTLINE_ADD' || !context?.cart?.id) return;\n\n        const {data, errors} = await cartLineAdd(\n          context.cart.id,\n          event.payload.lines,\n        );\n\n        const resultEvent = eventFromFetchResult(\n          event,\n          data?.cartLinesAdd?.cart,\n          errors,\n        );\n\n        send(resultEvent);\n      },\n      // eslint-disable-next-line @typescript-eslint/no-misused-promises\n      cartLineUpdateAction: async (context, event) => {\n        if (event.type !== 'CARTLINE_UPDATE' || !context?.cart?.id) return;\n        const {data, errors} = await cartLineUpdate(\n          context.cart.id,\n          event.payload.lines,\n        );\n\n        const resultEvent = eventFromFetchResult(\n          event,\n          data?.cartLinesUpdate?.cart,\n          errors,\n        );\n\n        send(resultEvent);\n      },\n      // eslint-disable-next-line @typescript-eslint/no-misused-promises\n      cartLineRemoveAction: async (context, event) => {\n        if (event.type !== 'CARTLINE_REMOVE' || !context?.cart?.id) return;\n        const {data, errors} = await cartLineRemove(\n          context.cart.id,\n          event.payload.lines,\n        );\n\n        const resultEvent = eventFromFetchResult(\n          event,\n          data?.cartLinesRemove?.cart,\n          errors,\n        );\n\n        send(resultEvent);\n      },\n      // eslint-disable-next-line @typescript-eslint/no-misused-promises\n      noteUpdateAction: async (context, event) => {\n        if (event.type !== 'NOTE_UPDATE' || !context?.cart?.id) return;\n        const {data, errors} = await noteUpdate(\n          context.cart.id,\n          event.payload.note,\n        );\n\n        const resultEvent = eventFromFetchResult(\n          event,\n          data?.cartNoteUpdate?.cart,\n          errors,\n        );\n\n        send(resultEvent);\n      },\n      // eslint-disable-next-line @typescript-eslint/no-misused-promises\n      buyerIdentityUpdateAction: async (context, event) => {\n        if (event.type !== 'BUYER_IDENTITY_UPDATE' || !context?.cart?.id)\n          return;\n        const {data, errors} = await buyerIdentityUpdate(\n          context.cart.id,\n          event.payload.buyerIdentity,\n        );\n\n        const resultEvent = eventFromFetchResult(\n          event,\n          data?.cartBuyerIdentityUpdate?.cart,\n          errors,\n        );\n\n        send(resultEvent);\n      },\n      // eslint-disable-next-line @typescript-eslint/no-misused-promises\n      cartAttributesUpdateAction: async (context, event) => {\n        if (event.type !== 'CART_ATTRIBUTES_UPDATE' || !context?.cart?.id)\n          return;\n        const {data, errors} = await cartAttributesUpdate(\n          context.cart.id,\n          event.payload.attributes,\n        );\n\n        const resultEvent = eventFromFetchResult(\n          event,\n          data?.cartAttributesUpdate?.cart,\n          errors,\n        );\n\n        send(resultEvent);\n      },\n      // eslint-disable-next-line @typescript-eslint/no-misused-promises\n      discountCodesUpdateAction: async (context, event) => {\n        if (event.type !== 'DISCOUNT_CODES_UPDATE' || !context?.cart?.id)\n          return;\n        const {data, errors} = await discountCodesUpdate(\n          context.cart.id,\n          event.payload.discountCodes,\n        );\n        const resultEvent = eventFromFetchResult(\n          event,\n          data?.cartDiscountCodesUpdate?.cart,\n          errors,\n        );\n\n        send(resultEvent);\n      },\n      ...(onCartActionEntry && {\n        onCartActionEntry: (context, event): void => {\n          if (isCartActionEvent(event)) {\n            onCartActionEntry(context, event);\n          }\n        },\n      }),\n      ...(onCartActionOptimisticUI && {\n        onCartActionOptimisticUI: assign((context, event) => {\n          return onCartActionOptimisticUI(context, event);\n        }),\n      }),\n      ...(onCartActionComplete && {\n        onCartActionComplete: (context, event): void => {\n          if (isCartFetchResultEvent(event)) {\n            onCartActionComplete(context, event);\n          }\n        },\n      }),\n    } as CartMachineActions,\n  });\n\n  return useMemo(() => [state, send, service] as const, [state, send, service]);\n}\n\nexport function cartFromGraphQL(\n  cart: PartialDeep<CartType, {recurseIntoArrays: true}>,\n): Cart {\n  return {\n    ...cart,\n    lines: flattenConnection(cart?.lines),\n    note: cart.note ?? undefined,\n  };\n}\n\nfunction eventFromFetchResult(\n  cartActionEvent: CartMachineActionEvent,\n  cart?: PartialDeep<CartType, {recurseIntoArrays: true}> | null,\n  errors?: unknown,\n): CartMachineFetchResultEvent {\n  if (errors) {\n    return {type: 'ERROR', payload: {errors, cartActionEvent}};\n  }\n\n  if (!cart) {\n    return {\n      type: 'CART_COMPLETED',\n      payload: {\n        cartActionEvent,\n      },\n    };\n  }\n\n  return {\n    type: 'RESOLVE',\n    payload: {\n      cart: cartFromGraphQL(cart),\n      rawCartResult: cart,\n      cartActionEvent,\n    },\n  };\n}\n\nfunction isCartActionEvent(\n  event: CartMachineEvent | InitEvent,\n): event is CartMachineActionEvent {\n  return (\n    event.type === 'CART_CREATE' ||\n    event.type === 'CARTLINE_ADD' ||\n    event.type === 'CARTLINE_UPDATE' ||\n    event.type === 'CARTLINE_REMOVE' ||\n    event.type === 'NOTE_UPDATE' ||\n    event.type === 'BUYER_IDENTITY_UPDATE' ||\n    event.type === 'CART_ATTRIBUTES_UPDATE' ||\n    event.type === 'DISCOUNT_CODES_UPDATE'\n  );\n}\n\nfunction isCartFetchResultEvent(\n  event: CartMachineEvent | InitEvent,\n): event is CartMachineFetchResultEvent {\n  return (\n    event.type === 'RESOLVE' ||\n    event.type === 'ERROR' ||\n    event.type === 'CART_COMPLETED'\n  );\n}\n"],"mappings":"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"}