{
  "version": 3,
  "sources": ["/cdn/shop/t/24/assets/pickup-discount-guard.js?cv=20260824a"],
  "sourcesContent": ["/**\n * Keep PICKUP* discount codes off the storefront cart.\n * They should only be entered/applied at Checkout.\n */\n(function () {\n  'use strict';\n\n  const PICKUP_DISCOUNT_CODES = ['PICKUP100'];\n  const CHECKOUT_PATH_PATTERN = /\\/(?:checkouts?|checkout)(?:\\/|$|\\?)/i;\n\n  if (CHECKOUT_PATH_PATTERN.test(window.location.pathname + window.location.search)) {\n    return;\n  }\n\n  let stripping = false;\n\n  function normalizeCode(code) {\n    return String(code || '')\n      .trim()\n      .toUpperCase();\n  }\n\n  function isPickupCode(code) {\n    const normalized = normalizeCode(code);\n    return PICKUP_DISCOUNT_CODES.some((pickupCode) => normalizeCode(pickupCode) === normalized);\n  }\n\n  function cartHasPickupCode(cart) {\n    return (cart?.discount_codes || []).some((entry) => isPickupCode(entry.code));\n  }\n\n  function remainingDiscountCodes(cart) {\n    return (cart?.discount_codes || [])\n      .map((entry) => entry.code)\n      .filter((code) => code && !isPickupCode(code));\n  }\n\n  function clearPickupDiscountCookie() {\n    const cookies = document.cookie ? document.cookie.split(';') : [];\n    cookies.forEach((part) => {\n      const name = part.split('=')[0]?.trim();\n      if (!name) return;\n      if (!/discount/i.test(name)) return;\n      document.cookie = `${name}=; path=/; max-age=0`;\n      document.cookie = `${name}=; path=/; max-age=0; domain=${window.location.hostname}`;\n    });\n  }\n\n  function publishCartUpdate(cart) {\n    if (!cart) return;\n    if (window.FoxTheme?.pubsub?.PUB_SUB_EVENTS?.cartUpdate) {\n      FoxTheme.pubsub.publish(FoxTheme.pubsub.PUB_SUB_EVENTS.cartUpdate, { cart });\n      return;\n    }\n    document.dispatchEvent(new CustomEvent('cart:refresh', { detail: { open: false } }));\n  }\n\n  async function fetchCart() {\n    const response = await fetch('/cart.js', { credentials: 'same-origin' });\n    return response.json();\n  }\n\n  async function stripPickupCodesFromCart() {\n    if (stripping) return null;\n    stripping = true;\n    try {\n      const cart = await fetchCart();\n      if (!cartHasPickupCode(cart)) return null;\n\n      clearPickupDiscountCookie();\n      const remaining = remainingDiscountCodes(cart);\n      const response = await fetch('/cart/update.js', {\n        method: 'POST',\n        credentials: 'same-origin',\n        headers: {\n          'Content-Type': 'application/json',\n          Accept: 'application/json'\n        },\n        body: JSON.stringify({ discount: remaining.join(',') })\n      });\n      const updatedCart = await response.json();\n      publishCartUpdate(updatedCart);\n      return updatedCart;\n    } catch (error) {\n      console.warn('[pickup-discount-guard] Failed to strip pickup codes', error);\n      return null;\n    } finally {\n      stripping = false;\n    }\n  }\n\n  function blockPickupDiscountFetch() {\n    if (typeof window.fetch !== 'function' || window.__pickupDiscountFetchPatched) return;\n    window.__pickupDiscountFetchPatched = true;\n    const originalFetch = window.fetch.bind(window);\n\n    window.fetch = function (input) {\n      const url = typeof input === 'string' ? input : input && input.url;\n      if (url && /\\/discount\\/PICKUP100(?:\\b|[/?#]|$)/i.test(String(url))) {\n        clearPickupDiscountCookie();\n        return Promise.resolve(new Response(null, { status: 204, statusText: 'No Content' }));\n      }\n      return originalFetch.apply(this, arguments);\n    };\n  }\n\n  function init() {\n    blockPickupDiscountFetch();\n    stripPickupCodesFromCart();\n\n    document.addEventListener('cart:updated', function () {\n      stripPickupCodesFromCart();\n    });\n    document.addEventListener('cart:opened', function () {\n      stripPickupCodesFromCart();\n    });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
