{
  "version": 3,
  "sources": ["/cdn/shop/t/123/assets/pc-hyt-cart.js?cb=25616"],
  "sourcesContent": ["/* ============================================================================\n   PC | Hack Your Tummy: product data + add to cart, shared by every HYT lander.\n\n   Every number in here was read from the live store on 2026-08-10:\n     /products/digestive-enzymes-60b-probiotic-bundle.js   the bundle\n     /products/probiotic-60-billion.js                    60 Billion Probiotic\n     /products/digestive-enzymes-prebiotic-probiotic.js    Digestive Enzymes\n\n   Nothing here is a guess. Two things worth knowing before you edit it:\n\n   1. compare_at_price is null on every HYT variant, so there is no \"was\" anchor\n      to borrow from Shopify. The two honest anchors are (a) the one time price of\n      the same size, and (b) what the two bottles cost bought separately, which is\n      why apartParts carries its own live prices.\n\n   2. Both selling plans return the SAME price for a given variant (15% either\n      way), so the plan is not a discount choice, only a delivery cadence. Each\n      size therefore rides the plan that matches its own supply, exactly as the\n      live PDP is locked (see the pc-hyt-bundle-size-plan-lock note).\n   ========================================================================== */\n(function () {\n  'use strict';\n\n  var HANDLE = 'digestive-enzymes-60b-probiotic-bundle';\n  var STORE  = 'physicianschoice.com';\n\n  /* The static spine of each size: what it is, what is in it, how often it ships.\n     Every PRICE below is a snapshot read on 2026-08-10 and is only what shows if\n     nothing better is available. On the Shopify theme the section emits\n     window.PC_HYT_DATA from Liquid and hydrate() overwrites the snapshot with the\n     store's own numbers, so a price change on the store moves the page with it.\n     apartParts name a component product and one of its variants, so the \"bought\n     separately\" anchor is hydrated the same way. */\n  var SIZES = [\n    {\n      key: 'standard',\n      label: 'Standard',\n      variant: 51685769511284,\n      once: 47.03,\n      sub: 39.98,\n      plan: 693717795188,\n      cadence: 30,                        // days between deliveries\n      cadenceLabel: 'every 30 days',\n      supply: '1 month supply',\n      contents: '60 Billion Probiotic 30ct + Digestive Enzymes 60ct',\n      caps: [['60 Billion Probiotic', '30 capsules'], ['Digestive Enzymes', '60 capsules']],\n      apartParts: [\n        { label: '60 Billion Probiotic 30ct', product: '60b', variant: '30 Count', price: 29.38 },\n        { label: 'Digestive Enzymes 60ct',    product: 'de',  variant: '60 Count', price: 23.95 }\n      ]\n    },\n    {\n      key: 'value',\n      label: 'Value Size',\n      variant: 51685769544052,\n      once: 81.15,\n      sub: 68.98,\n      plan: 693767209332,\n      cadence: 60,\n      cadenceLabel: 'every 60 days',\n      supply: '2 month supply',\n      contents: '60 Billion Probiotic 60ct + Digestive Enzymes 180ct',\n      caps: [['60 Billion Probiotic', '60 capsules'], ['Digestive Enzymes', '180 capsules']],\n      apartParts: [\n        { label: '60 Billion Probiotic 60ct', product: '60b', variant: '60 Count',  price: 45.85 },\n        { label: 'Digestive Enzymes 180ct',   product: 'de',  variant: '180 Count', price: 47.02 }\n      ],\n      popular: true\n    }\n    /* Choice Size (52077352223092, $54.09 / $45.98) is deliberately absent: the\n       live PDP retired it in July and none of the HYT landers offer it. */\n  ];\n\n  /* Kaching bundle wiring, copied from the shipped hyl1/hyl2/hyl3 buyboxes. */\n  var DEAL = '19nN';\n\n  /* The free gift WAS the fiber sampler, the same one the rest of the store gave\n     away (fiber-gummies-swap-bbfix added it on every other cart path). It went out\n     of stock for the second time on 2026-09-08 and the gift has now been removed\n     from the whole store, so GIFT_OFF is true and nothing here adds it. The id and\n     the Kaching auto-gift payload are kept so the cart audit below can still zero\n     out a stray line left by an older cart, and so a future gift only needs these\n     three constants changed. */\n  var GIFT_OFF = true;\n  var GIFT_ID = 54770520883572;\n  var GIFT_PROPS = JSON.stringify({\n    isAutoAtcGift: true,\n    autoAtcGiftPayload: {\n      ruleId: 'RdBOw1Ls4csOJ9pvl9lyBbakL', actionItemId: 'L5IOhJ7k0n2GoemTX4Et3v6dU',\n      productId: 15100391129460, qty: 1, discountAmount: 100, discountType: 'percentage',\n      hash: '1s5fiwp'\n    }\n  });\n\n  var FREE_SHIP_MIN = 45;               // PC's own storewide threshold\n\n  function sumApart(s) {\n    s.apart = +(s.apartParts.reduce(function (t, p) { return t + p.price; }, 0)).toFixed(2);\n  }\n\n  /* ------------------------------------------------------------------ hydrate\n     window.PC_HYT_DATA is emitted by the theme section straight out of Liquid.\n     Money arrives as integer CENTS, because Liquid float formatting is not worth\n     betting a live price on:\n\n       { variants: [{ id, title, available, cents, plans: [{ id, name, cents }] }],\n         components: { '60b': { '30 Count': 2938, ... }, 'de': { ... } } }\n\n     A size takes the plan whose NAME matches its own cadence, which is how the\n     live PDP is locked. Both plans return the same price per variant, so the plan\n     is a delivery cadence and never a discount choice. Anything that fails to\n     match leaves the snapshot in place and says so on the console rather than\n     silently showing a price that is not the store's. */\n  var hydrated = { ok: false, warnings: [] };\n\n  function hydrate(blob) {\n    if (!blob || !blob.variants) return;\n    var byId = {};\n    blob.variants.forEach(function (v) { byId[String(v.id)] = v; });\n\n    var cash = function (cents) { return Math.round(cents) / 100; };\n\n    SIZES.forEach(function (s) {\n      var v = byId[String(s.variant)];\n      if (!v) {\n        hydrated.warnings.push('variant ' + s.variant + ' (' + s.label + ') not in the store payload');\n        return;\n      }\n      s.once = cash(v.cents);\n      s.soldOut = v.available === false;\n      if (s.soldOut) hydrated.warnings.push(s.label + ' is sold out on the store');\n\n      var want = 'every ' + s.cadence + ' days';\n      var plan = (v.plans || []).filter(function (p) {\n        return String(p.name || '').toLowerCase().indexOf(want) !== -1;\n      })[0];\n      if (plan) { s.plan = plan.id; s.sub = cash(plan.cents); }\n      else { hydrated.warnings.push('no selling plan named \"' + want + '\" on ' + s.label); }\n\n      (s.apartParts || []).forEach(function (part) {\n        var table = (blob.components || {})[part.product] || {};\n        if (typeof table[part.variant] === 'number') part.price = cash(table[part.variant]);\n        else hydrated.warnings.push('component price missing: ' + part.product + ' ' + part.variant);\n      });\n    });\n\n    hydrated.ok = hydrated.warnings.length === 0;\n    if (hydrated.warnings.length) {\n      console.warn('PC_HYT: falling back to the 2026-08-10 snapshot for:\\n  ' +\n                   hydrated.warnings.join('\\n  '));\n    }\n  }\n\n  hydrate(window.PC_HYT_DATA);\n  SIZES.forEach(sumApart);\n\n  function money(n) {\n    return '$' + n.toFixed(2);\n  }\n\n  /* Per day is price divided by the delivery cadence, and the page always prints\n     the cadence beside it so the number cannot be read as a per capsule cost. */\n  function perDay(price, size) {\n    return '$' + (price / size.cadence).toFixed(2);\n  }\n\n  function pct(from, to) {\n    return Math.round((1 - to / from) * 100);\n  }\n\n  function priceOf(size, subscribe) {\n    return subscribe ? size.sub : size.once;\n  }\n\n  function rid() {\n    return Math.random().toString(36).slice(2, 6);\n  }\n\n  function post(url, body) {\n    return fetch(url, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },\n      body: JSON.stringify(body)\n    });\n  }\n\n  function openCart() {\n    if (typeof window.__BBFIX_OPEN === 'function') return window.__BBFIX_OPEN();\n    if (typeof window.__BBFIX_SHOWCART === 'function') return window.__BBFIX_SHOWCART();\n    if (typeof window.openCart === 'function') return window.openCart();\n    window.location.href = '/cart';\n  }\n\n  function onStore() {\n    return location.hostname.indexOf(STORE) !== -1;\n  }\n\n  /* Off the store there is no cart to post to, and a /cart/<id>:<qty> permalink\n     jumps straight to checkout, which is the wrong thing to hand a reviewer. So\n     off domain we open the real PDP on the chosen variant instead. */\n  function pdpUrl(size) {\n    return 'https://' + STORE + '/products/' + HANDLE + '?variant=' + size.variant;\n  }\n\n  /* Add to cart: clear -> main + gift in ONE add -> audit.\n     The gift must NOT go in its own request. A separate gift request leaves a window\n     where the global bbfix ensure-gift (fiber-gummies-swap-bbfix, armed on every\n     template that is not in its advertorial list, this lander included) reads a\n     giftless cart and adds its own BARE sampler. That line and this _kaching_cart\n     one differ in properties, so Shopify never merges them and the gift-qty safety\n     net never sees them either: it only reduces a line whose quantity is above 1,\n     and these are two lines of quantity 1. The order then ships 2 x VIRT-04-004,\n     which is the 2026-08-11 incident. Verified live: a batched add keeps both the\n     quantity and the selling plan, so the only real risk is an out of stock gift\n     killing the whole add, and the main-only retry below covers that. */\n  function addToCart(size, subscribe) {\n    if (!onStore()) {\n      window.open(pdpUrl(size), '_blank', 'noopener');\n      return Promise.resolve({ offStore: true });\n    }\n\n    var r = rid(), b = rid();\n    var main = { id: size.variant, quantity: 1 };\n    if (subscribe) {\n      main.selling_plan = size.plan;\n      main.properties = {\n        '__kaching_bundles': JSON.stringify({ deal: DEAL, main: true, id: r, bid: b })\n      };\n    }\n\n    var items = [main];\n    if (subscribe && !GIFT_OFF) {\n      items.push({ id: GIFT_ID, quantity: 1, properties: { '_kaching_cart': GIFT_PROPS } });\n    }\n\n    return fetch('/cart/clear.js', { method: 'POST' })\n      .then(function () { return post('/cart/add.js', { items: items }); })\n      .then(function (res) {\n        if (res.ok) return res;\n        /* The batch died, most likely an out of stock gift. Land the paid line alone. */\n        return post('/cart/add.js', { items: [main] }).then(function (res2) {\n          if (!res2.ok) throw new Error('main line rejected (' + res2.status + ')');\n          return res2;\n        });\n      })\n      .then(function () { return fetch('/cart.js').then(function (res) { return res.json(); }); })\n      .then(function (cart) {\n        /* A gift that failed to discount must never be charged. */\n        var updates = {}, bad = false;\n        (cart.items || []).forEach(function (i) {\n          if (i.id === GIFT_ID && i.final_price > 0) { updates[i.key] = 0; bad = true; }\n        });\n        return bad ? post('/cart/update.js', { updates: updates }) : true;\n      })\n      .then(function () { openCart(); return { added: true }; });\n  }\n\n  window.PC_HYT = {\n    handle: HANDLE,\n    url: 'https://' + STORE + '/products/' + HANDLE,\n    sizes: SIZES,\n    byKey: function (k) { return SIZES.filter(function (s) { return s.key === k; })[0]; },\n    freeShipMin: FREE_SHIP_MIN,\n    subDiscountLabel: '15%',\n    gift: null,   /* sampler discontinued 2026-09-08; no lander promises it any more */\n    hydrated: hydrated,\n    money: money, perDay: perDay, pct: pct, priceOf: priceOf,\n    onStore: onStore, pdpUrl: pdpUrl, addToCart: addToCart\n  };\n})();\n"],
  "mappings": "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",
  "names": []
}
