{
  "version": 3,
  "sources": ["/cdn/shop/t/2/assets/twc-community-metaobjects.js?twc_revision=20260819_1"],
  "sourcesContent": ["/*\n * Complete metaobject collections for public community indexes.\n *\n * Liquid's `shop.metaobjects.<type>.values` stops at 50 entries. The Events,\n * Giveaways and Distilleries sections still render their Liquid (or digest)\n * slice as the immediate, no-JavaScript fallback, then use this helper to\n * read every published entry through Shopify's cursor-paginated Storefront\n * API.\n *\n * The access token is a PUBLIC Storefront API token, supplied at render time\n * from `shop.metafields.twc.storefront_api_token`. It is deliberately absent\n * from the repository. The token must grant `unauthenticated_read_metaobjects`\n * and `unauthenticated_read_product_listings`; Shopify requires the latter to\n * resolve MediaImage references, including files attached to metaobjects.\n *\n * Consumers own their DOM. This module owns only the GraphQL document,\n * pagination, typed field lookup, Shopify image references and safe text\n * helpers. It never removes a Liquid fallback when a request fails.\n */\n(function (global) {\n  'use strict';\n\n  if (global.TwcCommunityMetaobjects) return;\n\n  var PAGE_SIZE = 50;\n  var MAX_PAGES = 50;\n  var IMAGE_ALIASES = {\n    hero_image: 'heroImage',\n    hero_image_mobile: 'heroImageMobile',\n    event_image: 'eventImage',\n    giveaway_image: 'giveawayImage',\n    giveaway_thumbnail_image: 'giveawayThumbnailImage',\n    list_image: 'listImage',\n  };\n\n  var QUERY =\n    'query TwcCommunityMetaobjects($type: String!, $first: Int!, $after: String) {' +\n    ' metaobjects(type: $type, first: $first, after: $after, sortKey: \"id\") {' +\n    '  nodes {' +\n    '   handle onlineStoreUrl fields { key type value }' +\n    '   heroImage: field(key: \"hero_image\") {' +\n    '    reference { ... on MediaImage { image { url altText width height } } }' +\n    '   }' +\n    '   heroImageMobile: field(key: \"hero_image_mobile\") {' +\n    '    reference { ... on MediaImage { image { url altText width height } } }' +\n    '   }' +\n    '   eventImage: field(key: \"event_image\") {' +\n    '    reference { ... on MediaImage { image { url altText width height } } }' +\n    '   }' +\n    '   giveawayImage: field(key: \"giveaway_image\") {' +\n    '    reference { ... on MediaImage { image { url altText width height } } }' +\n    '   }' +\n    '   giveawayThumbnailImage: field(key: \"giveaway_thumbnail_image\") {' +\n    '    reference { ... on MediaImage { image { url altText width height } } }' +\n    '   }' +\n    '   listImage: field(key: \"list_image\") {' +\n    '    reference { ... on MediaImage { image { url altText width height } } }' +\n    '   }' +\n    '  }' +\n    '  pageInfo { hasNextPage endCursor }' +\n    ' }' +\n    '}';\n\n  function config(host) {\n    return {\n      token: host.getAttribute('data-storefront-api-token') || '',\n      domain: host.getAttribute('data-store-domain') || '',\n      version: host.getAttribute('data-storefront-api-version') || '2026-07',\n    };\n  }\n\n  function endpoint(options) {\n    return 'https://' + options.domain + '/api/' + options.version + '/graphql.json';\n  }\n\n  function fields(node) {\n    return (node.fields || []).reduce(function (out, field) {\n      out[field.key] = field.value == null ? '' : field.value;\n      return out;\n    }, {});\n  }\n\n  function value(node, key) {\n    if (!node._twcFields) node._twcFields = fields(node);\n    return node._twcFields[key] || '';\n  }\n\n  function image(node, key) {\n    var field = node[IMAGE_ALIASES[key] || 'heroImage'];\n    var found = field && field.reference && field.reference.image;\n    if (!found || !found.url) return null;\n    return {\n      url: found.url,\n      alt: found.altText || '',\n      width: found.width || null,\n      height: found.height || null,\n    };\n  }\n\n  function imageUrl(url, width) {\n    if (!url) return '';\n    return url + (url.indexOf('?') === -1 ? '?' : '&') + 'width=' + String(width);\n  }\n\n  function compareHandles(left, right) {\n    return String((left && left.handle) || '').localeCompare(\n      String((right && right.handle) || ''),\n      'en'\n    );\n  }\n\n  function plainRichText(valueToRead) {\n    if (!valueToRead) return '';\n    var documentValue;\n    try {\n      documentValue = JSON.parse(valueToRead);\n    } catch (error) {\n      return String(valueToRead).trim();\n    }\n\n    function read(node) {\n      if (!node) return '';\n      if (node.type === 'text') return node.value || '';\n      var children = (node.children || []).map(read).filter(Boolean);\n      var joiner = node.type === 'root' || node.type === 'list' ? ' ' : '';\n      return children.join(joiner);\n    }\n\n    return read(documentValue).replace(/\\s+/g, ' ').trim();\n  }\n\n  function truncate(text, limit) {\n    var clean = String(text || '').trim();\n    if (clean.length <= limit) return clean;\n    return clean.slice(0, Math.max(0, limit - 1)).trimEnd() + '\u2026';\n  }\n\n  function pathFromUrl(url) {\n    if (!url) return '';\n    try {\n      var parsed = new URL(url, global.location && global.location.origin);\n      return parsed.pathname + parsed.search + parsed.hash;\n    } catch (error) {\n      return url;\n    }\n  }\n\n  function sameStorePath(url, storeDomain) {\n    if (!url) return '';\n    try {\n      var parsed = new URL(url, global.location && global.location.origin);\n      var currentHost = global.location && global.location.hostname;\n      if (parsed.hostname !== currentHost && parsed.hostname !== storeDomain) return url;\n      return pathFromUrl(url);\n    } catch (error) {\n      return url;\n    }\n  }\n\n  async function page(options, type, after, signal, fetchImpl) {\n    var response = await fetchImpl(endpoint(options), {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n        'X-Shopify-Storefront-Access-Token': options.token,\n      },\n      body: JSON.stringify({\n        query: QUERY,\n        variables: { type: type, first: PAGE_SIZE, after: after },\n      }),\n      signal: signal,\n    });\n\n    if (!response.ok) throw new Error('Community content request failed');\n    var body = await response.json();\n    if (body.errors && body.errors.length) throw new Error('Community content query failed');\n    if (!body.data || !body.data.metaobjects) throw new Error('Community content response was incomplete');\n    return body.data.metaobjects;\n  }\n\n  async function loadAll(host, type, signal, fetchImpl) {\n    var options = config(host);\n    if (!options.token || !options.domain) return null;\n\n    var request = fetchImpl || global.fetch.bind(global);\n    var nodes = [];\n    var after = null;\n    var pageNumber = 0;\n\n    do {\n      pageNumber += 1;\n      if (pageNumber > MAX_PAGES) throw new Error('Community content exceeded the supported page count');\n      var result = await page(options, type, after, signal, request);\n      nodes = nodes.concat(result.nodes || []);\n      after = result.pageInfo && result.pageInfo.hasNextPage ? result.pageInfo.endCursor : null;\n      if (result.pageInfo && result.pageInfo.hasNextPage && !after) {\n        throw new Error('Community content response omitted its next cursor');\n      }\n    } while (after);\n\n    var unresolvedMedia = nodes.some(function (node) {\n      return (node.fields || []).some(function (fieldToCheck) {\n        return (\n          fieldToCheck.type === 'file_reference' &&\n          Boolean(fieldToCheck.value) &&\n          Boolean(IMAGE_ALIASES[fieldToCheck.key]) &&\n          !image(node, fieldToCheck.key)\n        );\n      });\n    });\n    if (unresolvedMedia) throw new Error('Community content image references were incomplete');\n\n    return nodes;\n  }\n\n  global.TwcCommunityMetaobjects = {\n    loadAll: loadAll,\n    fields: fields,\n    value: value,\n    image: image,\n    imageUrl: imageUrl,\n    compareHandles: compareHandles,\n    plainRichText: plainRichText,\n    truncate: truncate,\n    onlineStorePath: pathFromUrl,\n    sameStorePath: sameStorePath,\n  };\n})(window);\n"],
  "mappings": "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",
  "names": []
}
