{"version":3,"file":"useCartAPIStateMachine.mjs","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-01/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-01/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"],"names":[],"mappings":"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"}