{
  "version": 3,
  "sources": ["/cdn/shop/t/21/assets/townwine-collector-stats.js?rev=20260602a"],
  "sourcesContent": ["(function () {\n  var PRODUCT_WIDGET_SELECTOR = \"[data-townwine-collector-stats]\";\n  var SUMMARY_WIDGET_SELECTOR = \"[data-townwine-collector-summary]\";\n  var DEFAULT_PROXY_BASE = \"/apps/townwine-follow\";\n  var followRefreshTimer = null;\n  var snapshotRequestCache = new Map();\n  var SNAPSHOT_RETRY_LIMIT = 2;\n  var PENDING_FOLLOW_EVENT_TTL_MS = 5000;\n  var pendingOptimisticFollowEvents = new Map();\n\n  function normalizeProxyBase(value) {\n    var trimmedValue = String(value || \"\").trim();\n\n    if (!trimmedValue) {\n      return DEFAULT_PROXY_BASE;\n    }\n\n    return trimmedValue.endsWith(\"/\")\n      ? trimmedValue.slice(0, -1)\n      : trimmedValue;\n  }\n\n  function normalizeHandle(value) {\n    return String(value || \"\")\n      .trim()\n      .replace(/^@+/, \"\")\n      .replace(/\\/+$/, \"\")\n      .toLowerCase();\n  }\n\n  function isAutoCollectorHandleLabel(value) {\n    return /^@?collector-\\d+$/i.test(String(value || \"\").trim());\n  }\n\n  function removeAutoCollectorHandleFromText(value) {\n    return String(value || \"\")\n      .replace(/\\s*\u00B7\\s*@collector-\\d+\\b/gi, \"\")\n      .replace(/\\b@collector-\\d+\\s*\u00B7\\s*/gi, \"\")\n      .trim();\n  }\n\n  function cleanAutoCollectorHandleLabels(root) {\n    var scope = root || document;\n\n    Array.prototype.slice\n      .call(\n        scope.querySelectorAll(\n          \".imini__h > span, .inf-card__handle, .dc__nm > span, .tw-cart-rec-card__meta\",\n        ),\n      )\n      .forEach(function (element) {\n        if (!(element instanceof HTMLElement)) {\n          return;\n        }\n\n        var text = String(element.textContent || \"\").trim();\n\n        if (isAutoCollectorHandleLabel(text)) {\n          element.remove();\n          return;\n        }\n\n        if (/@collector-\\d+\\b/i.test(text)) {\n          var cleanedText = removeAutoCollectorHandleFromText(text);\n\n          if (cleanedText) {\n            element.textContent = cleanedText;\n          } else {\n            element.remove();\n          }\n        }\n      });\n  }\n\n  function observeAutoCollectorHandleLabels() {\n    if (\n      !(\"MutationObserver\" in window) ||\n      window.__townwineAutoCollectorHandleObserver\n    ) {\n      return;\n    }\n\n    window.__townwineAutoCollectorHandleObserver = new MutationObserver(\n      function (mutations) {\n        mutations.forEach(function (mutation) {\n          Array.prototype.slice\n            .call(mutation.addedNodes || [])\n            .forEach(function (node) {\n              if (node instanceof HTMLElement) {\n                cleanAutoCollectorHandleLabels(node);\n              }\n            });\n        });\n      },\n    );\n\n    window.__townwineAutoCollectorHandleObserver.observe(\n      document.documentElement,\n      {\n        childList: true,\n        subtree: true,\n      },\n    );\n  }\n\n  function getRequestShop() {\n    var shop = \"\";\n\n    if (window.Shopify && typeof window.Shopify.shop === \"string\") {\n      shop = window.Shopify.shop;\n    }\n\n    return String(shop || \"\")\n      .trim()\n      .toLowerCase();\n  }\n\n  function getProductWidgets(root) {\n    return Array.prototype.slice.call(\n      (root || document).querySelectorAll(PRODUCT_WIDGET_SELECTOR),\n    );\n  }\n\n  function getSummaryWidgets(root) {\n    return Array.prototype.slice.call(\n      (root || document).querySelectorAll(SUMMARY_WIDGET_SELECTOR),\n    );\n  }\n\n  function getSummaryWidgetMatchHandles(widget) {\n    var aliases = [];\n    var extraHandles = String(widget.dataset.collectorMatchHandles || \"\")\n      .split(\",\")\n      .map(normalizeHandle)\n      .filter(Boolean);\n    var primaryHandle = normalizeHandle(widget.dataset.influencerHandle || \"\");\n\n    [primaryHandle].concat(extraHandles).forEach(function (value) {\n      if (value && aliases.indexOf(value) === -1) {\n        aliases.push(value);\n      }\n    });\n\n    return aliases;\n  }\n\n  function collectGroups(root) {\n    var groups = new Map();\n\n    getProductWidgets(root || document).forEach(function (widget) {\n      if (!(widget instanceof HTMLElement)) {\n        return;\n      }\n\n      var productId = String(widget.dataset.productId || \"\").trim();\n\n      if (!productId) {\n        return;\n      }\n\n      var proxyBase = normalizeProxyBase(widget.dataset.proxyBase);\n      var group = groups.get(proxyBase) || {\n        productWidgets: [],\n        summaryWidgets: [],\n        productIds: new Set(),\n        handles: new Set(),\n      };\n\n      group.productWidgets.push(widget);\n      group.productIds.add(productId);\n      groups.set(proxyBase, group);\n    });\n\n    getSummaryWidgets(root || document).forEach(function (widget) {\n      if (!(widget instanceof HTMLElement)) {\n        return;\n      }\n\n      var handles = getSummaryWidgetMatchHandles(widget);\n\n      if (!handles.length) {\n        return;\n      }\n\n      var proxyBase = normalizeProxyBase(widget.dataset.proxyBase);\n      var group = groups.get(proxyBase) || {\n        productWidgets: [],\n        summaryWidgets: [],\n        productIds: new Set(),\n        handles: new Set(),\n      };\n\n      group.summaryWidgets.push(widget);\n      handles.forEach(function (handle) {\n        group.handles.add(handle);\n      });\n      groups.set(proxyBase, group);\n    });\n\n    return groups;\n  }\n\n  function setText(scope, selector, value) {\n    scope.querySelectorAll(selector).forEach(function (element) {\n      if (element instanceof HTMLElement) {\n        element.textContent = value;\n      }\n    });\n  }\n\n  function formatInteger(value) {\n    var safeValue = Number(value);\n\n    if (!Number.isFinite(safeValue)) {\n      return \"0\";\n    }\n\n    return new Intl.NumberFormat(\"ko-KR\").format(\n      Math.max(0, Math.trunc(safeValue)),\n    );\n  }\n\n  function toCount(value) {\n    var parsedValue = Number(String(value == null ? \"\" : value).trim());\n\n    if (!Number.isFinite(parsedValue)) {\n      return null;\n    }\n\n    return Math.max(0, Math.trunc(parsedValue));\n  }\n\n  function toCountFromLabel(value) {\n    var rawValue = String(value == null ? \"\" : value)\n      .trim()\n      .toLowerCase();\n\n    if (!rawValue) {\n      return null;\n    }\n\n    var compactMatch = rawValue.match(/(\\d+(?:\\.\\d+)?)\\s*k\\b/);\n    if (compactMatch) {\n      var compactValue = Number(compactMatch[1]);\n\n      if (Number.isFinite(compactValue)) {\n        return Math.max(0, Math.trunc(compactValue * 1000));\n      }\n    }\n\n    var digitMatches = rawValue.match(/\\d+/g);\n    if (!digitMatches || !digitMatches.length) {\n      return null;\n    }\n\n    var parsedValue = Number(digitMatches.join(\"\"));\n\n    if (!Number.isFinite(parsedValue)) {\n      return null;\n    }\n\n    return Math.max(0, Math.trunc(parsedValue));\n  }\n\n  function formatFollowerCount(value) {\n    var safeValue = Number(value);\n\n    if (!Number.isFinite(safeValue)) {\n      return \"0 \uD314\uB85C\uC6CC\";\n    }\n\n    safeValue = Math.max(0, Math.trunc(safeValue));\n\n    if (safeValue >= 1000) {\n      return (safeValue / 1000).toFixed(1).replace(/\\.0$/, \"\") + \"k \uD314\uB85C\uC6CC\";\n    }\n\n    return formatInteger(safeValue) + \" \uD314\uB85C\uC6CC\";\n  }\n\n  function wait(milliseconds) {\n    return new Promise(function (resolve) {\n      window.setTimeout(resolve, milliseconds);\n    });\n  }\n\n  function getDealsLabel(widget, snapshot) {\n    if (!(widget instanceof HTMLElement) || !snapshot) {\n      return \"\uB204\uC801 \uACF5\uAD6C 0\uD68C\";\n    }\n\n    var dealsFormat = String(widget.dataset.dealsFormat || \"\").trim();\n\n    if (dealsFormat) {\n      return dealsFormat.replace(\n        \"{count}\",\n        formatInteger(snapshot.dealCount || 0),\n      );\n    }\n\n    return snapshot.dealsLabel || \"\uB204\uC801 \uACF5\uAD6C 0\uD68C\";\n  }\n\n  function setLoadingState(widget) {\n    if (\n      !(widget instanceof HTMLElement) ||\n      widget.dataset.statsReady === \"true\"\n    ) {\n      return;\n    }\n\n    setText(\n      widget,\n      \"[data-collector-followers]\",\n      widget.dataset.loadingFollowersLabel || \"\uC9D1\uACC4 \uC911\",\n    );\n    setText(\n      widget,\n      \"[data-collector-deals]\",\n      widget.dataset.loadingDealsLabel || \"\uC9D1\uACC4 \uC911\",\n    );\n  }\n\n  function applySnapshot(widget, snapshot) {\n    if (!(widget instanceof HTMLElement) || !snapshot) {\n      return;\n    }\n\n    widget.dataset.followerCount = String(snapshot.followerCount || 0);\n    widget.dataset.dealCount = String(snapshot.dealCount || 0);\n    widget.dataset.liveDealCount = String(snapshot.liveDealCount || 0);\n    widget.dataset.upcomingDealCount = String(snapshot.upcomingDealCount || 0);\n    widget.dataset.statsReady = \"true\";\n\n    var collectorCard = widget.closest(\"[data-collector-card]\");\n    if (collectorCard instanceof HTMLElement) {\n      collectorCard.dataset.followerCount = String(snapshot.followerCount || 0);\n      collectorCard.dataset.dealCount = String(snapshot.dealCount || 0);\n      collectorCard.dataset.liveDealCount = String(snapshot.liveDealCount || 0);\n      collectorCard.dataset.upcomingDealCount = String(\n        snapshot.upcomingDealCount || 0,\n      );\n\n      setText(\n        collectorCard,\n        \"[data-collector-live-deals]\",\n        formatInteger(snapshot.liveDealCount || 0),\n      );\n      setText(\n        collectorCard,\n        \"[data-collector-upcoming-deals]\",\n        formatInteger(snapshot.upcomingDealCount || 0),\n      );\n    }\n\n    setText(\n      widget,\n      \"[data-collector-followers]\",\n      snapshot.followersLabel || \"0 \uD314\uB85C\uC6CC\",\n    );\n    setText(widget, \"[data-collector-deals]\", getDealsLabel(widget, snapshot));\n    setText(\n      widget,\n      \"[data-collector-live-deals]\",\n      formatInteger(snapshot.liveDealCount || 0),\n    );\n    setText(\n      widget,\n      \"[data-collector-upcoming-deals]\",\n      formatInteger(snapshot.upcomingDealCount || 0),\n    );\n  }\n\n  function buildSnapshotRequestKey(proxyBase, productIds, handles) {\n    return [\n      proxyBase,\n      getRequestShop(),\n      productIds.slice().sort().join(\",\"),\n      handles.slice().sort().join(\",\"),\n    ].join(\"::\");\n  }\n\n  function requestSnapshots(url, attempt) {\n    return fetch(url, {\n      credentials: \"same-origin\",\n      headers: {\n        Accept: \"application/json\",\n      },\n    }).then(function (response) {\n      if (!response.ok) {\n        if (attempt < SNAPSHOT_RETRY_LIMIT) {\n          return wait(250 * (attempt + 1)).then(function () {\n            return requestSnapshots(url, attempt + 1);\n          });\n        }\n\n        throw new Error(\"COLLECTOR_STATS_REQUEST_FAILED\");\n      }\n\n      return response.json();\n    });\n  }\n\n  function fetchSnapshots(proxyBase, productIds, handles) {\n    var url = new URL(proxyBase + \"/collector-stats\", window.location.origin);\n    var requestKey = buildSnapshotRequestKey(proxyBase, productIds, handles);\n    var requestShop = getRequestShop();\n\n    productIds.forEach(function (productId) {\n      url.searchParams.append(\"productId\", productId);\n    });\n\n    handles.forEach(function (handle) {\n      url.searchParams.append(\"handle\", handle);\n    });\n\n    if (requestShop) {\n      url.searchParams.set(\"shop\", requestShop);\n    }\n\n    if (snapshotRequestCache.has(requestKey)) {\n      return snapshotRequestCache.get(requestKey);\n    }\n\n    var requestPromise = requestSnapshots(url.toString(), 0).finally(\n      function () {\n        snapshotRequestCache.delete(requestKey);\n      },\n    );\n\n    snapshotRequestCache.set(requestKey, requestPromise);\n\n    return requestPromise;\n  }\n\n  function getEventMatchHandles(detail) {\n    var aliases = [];\n    var matchHandles = detail && detail.matchHandles;\n    var values = [];\n\n    if (Array.isArray(matchHandles)) {\n      values = matchHandles;\n    } else if (typeof matchHandles === \"string\") {\n      values = matchHandles.split(\",\");\n    }\n\n    [detail && detail.influencerHandle]\n      .concat(values)\n      .map(normalizeHandle)\n      .filter(Boolean)\n      .forEach(function (value) {\n        if (aliases.indexOf(value) === -1) {\n          aliases.push(value);\n        }\n      });\n\n    return aliases;\n  }\n\n  function getFollowEventKey(detail) {\n    if (!detail) {\n      return \"\";\n    }\n\n    var handles = getEventMatchHandles(detail);\n    var primaryHandle = normalizeHandle(\n      (detail && detail.influencerHandle) || \"\",\n    );\n    var eventHandle = primaryHandle || handles[0] || \"\";\n    var proxyBase = normalizeProxyBase(\n      (detail && detail.proxyBase) || DEFAULT_PROXY_BASE,\n    );\n    var followingState =\n      detail && typeof detail.following === \"boolean\"\n        ? String(detail.following)\n        : \"\";\n\n    if (!eventHandle || !followingState) {\n      return \"\";\n    }\n\n    return [proxyBase, eventHandle, followingState].join(\"::\");\n  }\n\n  function prunePendingOptimisticFollowEvents(now) {\n    pendingOptimisticFollowEvents.forEach(function (timestamp, key) {\n      if (now - timestamp > PENDING_FOLLOW_EVENT_TTL_MS) {\n        pendingOptimisticFollowEvents.delete(key);\n      }\n    });\n  }\n\n  function rememberPendingOptimisticFollowEvent(detail) {\n    var eventKey = getFollowEventKey(detail);\n\n    if (!eventKey) {\n      return;\n    }\n\n    var now = Date.now();\n    prunePendingOptimisticFollowEvents(now);\n    pendingOptimisticFollowEvents.set(eventKey, now);\n  }\n\n  function consumePendingOptimisticFollowEvent(detail) {\n    var eventKey = getFollowEventKey(detail);\n\n    if (!eventKey || !pendingOptimisticFollowEvents.has(eventKey)) {\n      return false;\n    }\n\n    var now = Date.now();\n    var timestamp = pendingOptimisticFollowEvents.get(eventKey) || 0;\n    pendingOptimisticFollowEvents.delete(eventKey);\n\n    return now - timestamp <= PENDING_FOLLOW_EVENT_TTL_MS;\n  }\n\n  function clearInversePendingOptimisticFollowEvent(detail) {\n    if (!detail || typeof detail.following !== \"boolean\") {\n      return;\n    }\n\n    var eventKey = getFollowEventKey({\n      proxyBase: detail.proxyBase,\n      influencerHandle: detail.influencerHandle,\n      matchHandles: detail.matchHandles,\n      following: !detail.following,\n    });\n\n    if (eventKey) {\n      pendingOptimisticFollowEvents.delete(eventKey);\n    }\n  }\n\n  function getSnapshotScore(snapshot) {\n    if (!snapshot) {\n      return -1;\n    }\n\n    return (\n      Math.max(0, Number(snapshot.dealCount || 0)) * 1000000 +\n      Math.max(0, Number(snapshot.followerCount || 0))\n    );\n  }\n\n  function getPreferredSummarySnapshot(widget, snapshots) {\n    var handles = getSummaryWidgetMatchHandles(widget);\n    var bestSnapshot = null;\n    var bestScore = -1;\n\n    handles.forEach(function (handle) {\n      var snapshot = snapshots[handle];\n\n      if (!snapshot) {\n        return;\n      }\n\n      var score = getSnapshotScore(snapshot);\n\n      if (score > bestScore) {\n        bestSnapshot = snapshot;\n        bestScore = score;\n      }\n    });\n\n    if (bestSnapshot) {\n      return bestSnapshot;\n    }\n\n    return (\n      snapshots[normalizeHandle(widget.dataset.influencerHandle || \"\")] || null\n    );\n  }\n\n  function applyOptimisticFollowChange(detail) {\n    if (!detail || typeof detail.following !== \"boolean\") {\n      return;\n    }\n\n    var delta = detail.following ? 1 : -1;\n    var matchHandles = getEventMatchHandles(detail);\n\n    if (!matchHandles.length) {\n      return;\n    }\n\n    getSummaryWidgets(document).forEach(function (widget) {\n      if (!(widget instanceof HTMLElement)) {\n        return;\n      }\n\n      var widgetHandles = getSummaryWidgetMatchHandles(widget);\n      var isMatched = widgetHandles.some(function (handle) {\n        return matchHandles.indexOf(handle) !== -1;\n      });\n\n      if (!isMatched || widget.dataset.statsReady !== \"true\") {\n        return;\n      }\n\n      var currentFollowerCount = toCount(widget.dataset.followerCount);\n      var currentDealCount = toCount(widget.dataset.dealCount);\n      var currentLiveDealCount = toCount(widget.dataset.liveDealCount);\n      var currentUpcomingDealCount = toCount(widget.dataset.upcomingDealCount);\n\n      if (currentFollowerCount == null) {\n        var followerNode = widget.querySelector(\"[data-collector-followers]\");\n        currentFollowerCount = toCountFromLabel(\n          followerNode && typeof followerNode.textContent === \"string\"\n            ? followerNode.textContent\n            : \"\",\n        );\n      }\n\n      if (currentDealCount == null) {\n        var dealNode = widget.querySelector(\"[data-collector-deals]\");\n        currentDealCount = toCountFromLabel(\n          dealNode && typeof dealNode.textContent === \"string\"\n            ? dealNode.textContent\n            : \"\",\n        );\n      }\n\n      if (currentFollowerCount == null || currentDealCount == null) {\n        return;\n      }\n\n      var nextFollowerCount = Math.max(0, currentFollowerCount + delta);\n\n      applySnapshot(widget, {\n        followerCount: nextFollowerCount,\n        dealCount: currentDealCount,\n        liveDealCount: currentLiveDealCount == null ? 0 : currentLiveDealCount,\n        upcomingDealCount:\n          currentUpcomingDealCount == null ? 0 : currentUpcomingDealCount,\n        followersLabel: formatFollowerCount(nextFollowerCount),\n        dealsLabel: \"\uB204\uC801 \uACF5\uAD6C \" + formatInteger(currentDealCount) + \"\uD68C\",\n      });\n    });\n  }\n\n  function refresh(root) {\n    var groups = collectGroups(root || document);\n\n    groups.forEach(function (group, proxyBase) {\n      var productIds = Array.from(group.productIds);\n      var handles = Array.from(group.handles);\n\n      if (!productIds.length && !handles.length) {\n        return;\n      }\n\n      group.productWidgets.forEach(setLoadingState);\n      group.summaryWidgets.forEach(setLoadingState);\n\n      // Public counts only: reuse a recent directory snapshot while revalidating.\n      var directory = document.querySelector('[data-townwine-collectors]');\n      var cachedKey = 'townwine:directory-stats:v1:' + getRequestShop();\n      if (directory) {\n        try {\n          var cached = JSON.parse(localStorage.getItem(cachedKey) || 'null');\n          if (cached && Date.now() - cached.at < 300000) {\n            group.summaryWidgets.forEach(function(widget) {var snapshot=getPreferredSummarySnapshot(widget,cached.snapshots);if(snapshot) applySnapshot(widget,snapshot);});\n            document.dispatchEvent(new CustomEvent('townwine:collector-stats-updated'));\n          }\n        } catch (_) {}\n      }\n\n      fetchSnapshots(proxyBase, productIds, handles)\n        .then(function (payload) {\n          var snapshots = (payload && payload.snapshots) || {};\n          if (directory) {\n            try {localStorage.setItem(cachedKey,JSON.stringify({at:Date.now(),snapshots:snapshots}));} catch (_) {}\n          }\n\n\n          group.productWidgets.forEach(function (widget) {\n            if (!(widget instanceof HTMLElement)) {\n              return;\n            }\n\n            var productId = String(widget.dataset.productId || \"\").trim();\n            applySnapshot(widget, snapshots[productId]);\n          });\n\n          group.summaryWidgets.forEach(function (widget) {\n            if (!(widget instanceof HTMLElement)) {\n              return;\n            }\n\n            applySnapshot(\n              widget,\n              getPreferredSummarySnapshot(widget, snapshots),\n            );\n          });\n\n          document.dispatchEvent(\n            new CustomEvent(\"townwine:collector-stats-updated\", {\n              detail: {\n                proxyBase: proxyBase,\n              },\n            }),\n          );\n        })\n        .catch(function (error) {\n          console.warn(\"[collector-stats] failed to fetch snapshots\", error);\n          document.dispatchEvent(new CustomEvent(\"townwine:collector-stats-error\"));\n        });\n    });\n  }\n\n  function initialize(root) {\n    cleanAutoCollectorHandleLabels(root || document);\n    observeAutoCollectorHandleLabels();\n    refresh(root || document);\n  }\n\n  document.addEventListener(\"shopify:section:load\", function (event) {\n    initialize(event.target);\n  });\n\n  function scheduleFollowRefresh() {\n    if (followRefreshTimer) {\n      window.clearTimeout(followRefreshTimer);\n    }\n\n    followRefreshTimer = window.setTimeout(function () {\n      followRefreshTimer = null;\n      refresh(document);\n    }, 1200);\n  }\n\n  document.addEventListener(\"townwine:follow-change\", function (event) {\n    var detail = (event && event.detail) || null;\n    var phase = String((detail && detail.phase) || \"\")\n      .trim()\n      .toLowerCase();\n\n    if (phase === \"optimistic\") {\n      rememberPendingOptimisticFollowEvent(detail);\n      applyOptimisticFollowChange(detail);\n      scheduleFollowRefresh();\n      return;\n    }\n\n    if (phase === \"rollback\") {\n      clearInversePendingOptimisticFollowEvent(detail);\n      applyOptimisticFollowChange(detail);\n      scheduleFollowRefresh();\n      return;\n    }\n\n    if (!consumePendingOptimisticFollowEvent(detail)) {\n      applyOptimisticFollowChange(detail);\n    }\n\n    scheduleFollowRefresh();\n  });\n\n  window.TownWineCollectorStats = {\n    init: initialize,\n    refresh: refresh,\n  };\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", function () {\n      initialize(document);\n    });\n    return;\n  }\n\n  initialize(document);\n})();\n"],
  "mappings": "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",
  "names": []
}
