PageSourceSearch

https://onceuponafarmorganics.com/cdn/shop/t/1115/assets/bundle-bu…?v=35549827607564177421789484047

js onceuponafarmorganics.com collected 2026-09-24 21:59:25 UTC 21,825 bytes, 2 lines download raw bytes

1import{bundleStore}from"@theme/bundle-builder-store";import{buildDynamicBundle,buildDynamicBundleSelection}from"@theme/bundle-builder-cart";import{validateDynamicBundleSync}from"@theme/bundle-builder-sdk";import{getActiveThreshold,getThresholdByQuantity,getTierCodeForPurchase,TIER_THRESHOLDS}from"@theme/bundle-builder-tier-config";import{formatMoney as formatMoneyTheme}from"@theme/money-formatting";import{ADDON_PARENT_SUBSCRIPTION_ID_PROPERTY}from"@theme/bundle-builder-constants";export const getTotalPrice=()=>bundleStore.getState().items.reduce((acc,item)=>acc+item.price*(Number(item.quantity)||0),0),getTotalBasePrice=()=>bundleStore.getState().items.reduce((acc,item)=>acc+item.basePrice*(Number(item.quantity)||0),0),getTotalPriceForPurchaseType=purchaseType=>{const threshold=getActiveThreshold();return bundleStore.getState().items.reduce((acc,item)=>{const unitPrice=getTierVariantByTierThreshold(item.productId,threshold,purchaseType)?.price??item.price;return acc+unitPrice*(Number(item.quantity)||0)},0)},getSubscribeTotalPrice=()=>getTotalPriceForPurchaseType("subscribe"),getOneTimeTotalPrice=()=>getTotalPriceForPurchaseType("one-time"),getTotalQuantity=()=>bundleStore.getState().items.reduce((acc,item)=>acc+item.quantity,0),getProduct=productId=>bundleStore.getState().products.find(product=>product.id===productId),getVariant=variantId=>bundleStore.getState().products.flatMap(product=>product.variants).find(variant=>variant.id===variantId),getTierVariant=(productId,extraQuantity=0)=>{const tier=getThresholdByQuantity(getTotalQuantity()+extraQuantity);return getTierVariantByTierThreshold(productId,tier)},getTierVariantByTierThreshold=(productId,tierThreshold,purchaseType=void 0)=>{const product=getProduct(productId);if(!product)return;const variantCode=getTierCodeForPurchase(tierThreshold,purchaseType??bundleStore.getState().purchaseType);return product.variants.find(variant2=>variant2.title.split("-").pop()===variantCode)},getBaseVariant=productId=>getProduct(productId)?.variants.find(variant=>variant.title==variant.sku),getSubscriptionBaseVariant=productId=>getTierVariantByTierThreshold(productId,Math.min(...TIER_THRESHOLDS),"subscribe"),getOneTimeBaseVariant=productId=>getTierVariantByTierThreshold(productId,Math.min(...TIER_THRESHOLDS),"one-time"),getRechargeSettingsRange=()=>{const ranges=bundleStore.getState().bundleSettings?.variants?.[0]?.ranges?.[0];return{min:ranges?.quantity_min??Math.min(...TIER_THRESHOLDS),max:ranges?.quantity_max??Math.max(...TIER_THRESHOLDS)}},getItemsToMinimum=()=>{const{min}=getRechargeSettingsRange();return Math.max(min-getTotalQuantity(),0)},meetsBundleMinimum=()=>getTotalQuantity()>0&&getItemsToMinimum()===0,getPerItemPriceForPurchaseType=purchaseType=>{const quantity=getTotalQuantity();return quantity<=0?0:getTotalPriceForPurchaseType(purchaseType)/quantity},getActiveCartTotal=(addonVariantPrices={})=>{const purchaseType=bundleStore.getState().purchaseType==="one-time"?"one-time":"subscribe";return getTotalPriceForPurchaseType(purchaseType)+getAddonsPriceTotals(addonVariantPrices).price},getBundleExternalVariantId=()=>{const settings=bundleStore.getState().bundleSettings,quantity=getTotalQuantity();if(!settings?.variants?.length)return null;for(const variant of settings.variants){const range=variant.ranges?.[0];if(range&&quantity>=range.quantity_min&&quantity<=range.quantity_max)return String(variant.external_variant_id)}const fallback=settings.default_bundle_variant_id;return fallback!=null?String(fallback):null},getItemsToMaximum=()=>{const{max}=getRechargeSettingsRange();return Math.max(max-getTotalQuantity(),0)},formatMoney=amount=>formatMoneyTheme(amount,bundleStore.getState().moneyFormat,bundleStore.getState().currency),getDynamicBundle=()=>{const{items,bundleProduct,purchaseType,sellingPlanId}=bundleStore.getState();if(!bundleProduct?.id||items.length===0)return null;const externalVariantId=getBundleExternalVariantId();if(!externalVariantId)return null;const selections=items.map(item=>buildDynamicBundleSelection({collectionId:item.collectionId,externalProductId:item.productId,externalVariantId:item.variantId,quantity:item.quantity,sellingPlanId,includeSellingPlan:purchaseType==="subscribe"}));return buildDynamicBundle({externalProductId:bundleProduct.id,externalVariantId,selections})},hasErrorsSkipOrMinimum=bundle=>{const collections=bundleStore.getState().collections,collectionQuantities=bundle.selections.reduce((acc,selection)=>{const collection=collections.find(collection2=>String(collection2.id)===String(selection.collectionId)),value=acc[String(selection.collectionId)]??{quantity:0,skipOrMinimum:collection?.ski
1pOrMinimum??null,isValid:!0};return value.quantity+=selection.quantity,acc[String(selection.collectionId)]=value,value.skipOrMinimum&&value.quantity>0&&value.quantity<value.skipOrMinimum?value.isValid=!1:value.isValid=!0,acc},{});if(!Object.values(collectionQuantities).every(value=>value.isValid)){const invalidReasons=[];for(const[collectionId,value]of Object.entries(collectionQuantities))if(!value.isValid){const quantityToMeetMinimum=(value.skipOrMinimum??0)-value.quantity;invalidReasons.push({type:"skipOrMinimum",quantityToMeetMinimum,collectionId:String(collectionId)})}return invalidReasons}return[]},hasErrorsMaxQuantityPerVariant=bundle=>{const maxQuantityPerVariant=bundleStore.getState().bundleSettings?.max_quantity_per_variant;if(!maxQuantityPerVariant)return[];const invalidReasons=[];for(const item of bundle.selections)item.quantity>maxQuantityPerVariant&&invalidReasons.push({type:"maxQuantityPerVariant",quantityOverMaximum:item.quantity-maxQuantityPerVariant,productId:String(item.externalProductId)});return invalidReasons},hasErrorsGlobalMinimumItems=()=>meetsBundleMinimum()?[]:[{type:"minimum",quantityToMeetMinimum:getItemsToMinimum()}],hasErrors=()=>{const globalMinimumErrors=hasErrorsGlobalMinimumItems();if(globalMinimumErrors.length>0)return globalMinimumErrors[0]??null;const bundle=getDynamicBundle();if(!bundle)return!0;const invalidReasons=[...hasErrorsSkipOrMinimum(bundle),...hasErrorsMaxQuantityPerVariant(bundle)];if(invalidReasons.length>0)return invalidReasons[0]??null;const isValidDynamicBundle=validateDynamicBundleSync(bundle);return isValidDynamicBundle!==!0?isValidDynamicBundle:null};const SELLING_PLAN_SELECT_ID="bundle-builder-selling-plan",INTERVAL_FROM_TEXT=/(\d+)\s*(day|week|month|year)s?/i;function normalizeSellingPlanId(id){if(id==null)return"";const str=String(id).trim();return str.match(/(\d+)$/)?.[1]??str}export function sellingPlanIdsMatch(left,right){const normalizedLeft=normalizeSellingPlanId(left),normalizedRight=normalizeSellingPlanId(right);return normalizedLeft!==""&&normalizedLeft===normalizedRight}function getSellingPlanSelectElement(){const select=document.getElementById(SELLING_PLAN_SELECT_ID);return select instanceof HTMLSelectElement?select:null}export function getSelectedSellingPlanId(){const{sellingPlanId,activeSubscription}=bundleStore.getState();if(sellingPlanId!=null&&String(sellingPlanId).trim()!=="")return String(sellingPlanId);if(activeSubscription)return null;const selectedValue=getSellingPlanSelectElement()?.value?.trim();return selectedValue||null}function normalizeIntervalUnit(unit){const normalized=String(unit??"").trim().toLowerCase();return normalized?normalized.endsWith("s")?normalized.slice(0,-1):normalized:""}function parseIntervalFromText(text){const match=String(text??"").match(INTERVAL_FROM_TEXT);if(!match)return null;const frequency=Number(match[1]),unit=normalizeIntervalUnit(match[2]);return!Number.isFinite(frequency)||!unit?null:{frequency,unit}}function getIntervalFromPolicy(plan,policyKey){if(!plan||typeof plan!="object")return null;const policy=Reflect.get(plan,policyKey);if(!policy||typeof policy!="object")return null;const frequency=Number(Reflect.get(policy,"interval_count")??1),unit=normalizeIntervalUnit(Reflect.get(policy,"interval"));return!Number.isFinite(frequency)||!unit?null:{frequency,unit}}export function getSellingPlanInterval(plan){const planName=plan&&typeof plan=="object"?Reflect.get(plan,"name"):void 0;return getIntervalFromPolicy(plan,"delivery_policy")??getIntervalFromPolicy(plan,"billing_policy")??parseIntervalFromText(planName)}function getSubscriptionFrequencyFromPlanObject(plan){if(!plan||typeof plan!="object")return null;const delivery=getIntervalFromPolicy(plan,"delivery_policy")??parseIntervalFromText(Reflect.get(plan,"name"));if(!delivery){const options=Reflect.get(plan,"options");if(Array.isArray(options))for(const option of options){const parsed=parseIntervalFromText(Reflect.get(option,"value"))??parseIntervalFromText(Reflect.get(option,"name"));if(parsed)return{order_interval_frequency:parsed.frequency,order_interval_unit:parsed.unit,charge_interval_frequency:parsed.frequency}}return null}const billing=getIntervalFromPolicy(plan,"billing_policy");return{order_interval_frequency:delivery.frequency,order_interval_unit:delivery.unit,charge_interval_frequency:billing?.frequency??delivery.frequency}}function getSubscriptionFrequencyFromOptionElement(option){const order_interval_frequency=Number(option.dataset.orderIntervalFrequency),order_interval_unit=normalizeIntervalUnit(option.dataset.orderIntervalUnit),charge_interval_frequency=Number(option.dataset.chargeIntervalFrequency??option.dataset.orderIntervalFrequency);if(Number.isFinite(order_interval_frequency)&&order_interval_unit)return Number.isFinite(c
1harge_interval_frequency)?{order_interval_frequency,order_interval_unit,charge_interval_frequency}:null;const parsed=parseIntervalFromText(option.dataset.planName)??parseIntervalFromText(option.textContent);return parsed?{order_interval_frequency:parsed.frequency,order_interval_unit:parsed.unit,charge_interval_frequency:parsed.frequency}:null}function getSubscriptionFrequencyFromSelectOption(sellingPlanId){const select=getSellingPlanSelectElement();if(!select||sellingPlanId==null||String(sellingPlanId).trim()==="")return null;const option=Array.from(select.options).find(candidate=>sellingPlanIdsMatch(candidate.value,sellingPlanId));return option?getSubscriptionFrequencyFromOptionElement(option):null}function getSellingPlanIdFromSelectForSubscription(subscription){const select=getSellingPlanSelectElement();if(!select||!subscription)return null;const targetFrequency=Number(subscription.order_interval_frequency),targetUnit=normalizeIntervalUnit(subscription.order_interval_unit);if(!Number.isFinite(targetFrequency)||!targetUnit)return null;for(const option of select.options){if(!option.value)continue;const frequency=getSubscriptionFrequencyFromOptionElement(option);if(frequency&&frequency.order_interval_frequency===targetFrequency&&normalizeIntervalUnit(frequency.order_interval_unit)===targetUnit)return option.value}return null}export function getSellingPlanIdForSubscription(subscription){const fromSelect=getSellingPlanIdFromSelectForSubscription(subscription);if(fromSelect)return fromSelect;const{sellingPlanGroups}=bundleStore.getState();if(!subscription||!Array.isArray(sellingPlanGroups))return null;const targetFrequency=Number(subscription.order_interval_frequency),targetUnit=normalizeIntervalUnit(subscription.order_interval_unit);if(!Number.isFinite(targetFrequency)||!targetUnit)return null;for(const group of sellingPlanGroups){const plans=group?.selling_plans;if(Array.isArray(plans))for(const plan of plans){const interval=getSellingPlanInterval(plan);if(interval&&interval.frequency===targetFrequency&&normalizeIntervalUnit(interval.unit)===targetUnit){const planId=plan?.id;return planId!=null?String(planId):null}}}return null}export function getSubscriptionFrequencyFromSellingPlanId(sellingPlanId){if(sellingPlanId==null)return null;const fromSelect=getSubscriptionFrequencyFromSelectOption(sellingPlanId);if(fromSelect)return fromSelect;const{sellingPlanGroups}=bundleStore.getState();if(!Array.isArray(sellingPlanGroups))return null;for(const group of sellingPlanGroups){const plans=group?.selling_plans;if(Array.isArray(plans)){for(const plan of plans)if(sellingPlanIdsMatch(plan?.id,sellingPlanId))return getSubscriptionFrequencyFromPlanObject(plan)}}return null}export function getSubscriptionFrequencyFromSubscription(subscription){if(!subscription||typeof subscription!="object")return null;const order_interval_frequency=Number(Reflect.get(subscription,"order_interval_frequency")),order_interval_unit=normalizeIntervalUnit(Reflect.get(subscription,"order_interval_unit")),charge_interval_frequency=Number(Reflect.get(subscription,"charge_interval_frequency")??Reflect.get(subscription,"order_interval_frequency"));return!Number.isFinite(order_interval_frequency)||!order_interval_unit||!Number.isFinite(charge_interval_frequency)?null:{order_interval_frequency,order_interval_unit,charge_interval_frequency}}export function getSubscriptionFrequencyUpdate({sellingPlanId,subscription}={}){const subscriptionFrequency=getSubscriptionFrequencyFromSubscription(subscription),resolvedPlanId=sellingPlanId??getSelectedSellingPlanId();if(subscription&&subscriptionFrequency){const{subscriptionBaseline}=bundleStore.getState(),baselinePlanId=subscriptionBaseline?.sellingPlanId??null;if(resolvedPlanId){const fromPlan=getSubscriptionFrequencyFromSellingPlanId(resolvedPlanId);if(fromPlan&&(baselinePlanId&&!sellingPlanIdsMatch(resolvedPlanId,baselinePlanId)||!baselinePlanId&&hasSubscriptionOrderFrequencyChanged(subscriptionFrequency,fromPlan)))return fromPlan}return subscriptionFrequency}if(resolvedPlanId){const fromPlan=getSubscriptionFrequencyFromSellingPlanId(resolvedPlanId);if(fromPlan)return fromPlan}const selectedOption=getSellingPlanSelectElement()?.selectedOptions?.[0];if(selectedOption instanceof HTMLOptionElement&&selectedOption.value){const fromSelectedOption=getSubscriptionFrequencyFromOptionElement(selectedOption);if(fromSelectedOption)return fromSelectedOption}return subscriptionFrequency}export function hasSubscriptionOrderFrequencyChanged(current,next){return next?current?current.order_interval_frequency!==next.order_interval_frequency||normalizeIntervalUnit(current.order_interval_unit)!==normalizeIntervalUnit(next.order_interval_unit):!0:!1}export function createSubscriptionBaseline(state){return{items:state.items.map(({productId,quantity,variantId,collectionId})=>({productId,quantity,variantId,collectionId})).sort((left,right)=>left.productId-right.productId),sellingPlanId:state.sellingPlanId}}function subscriptionBaselineItemsEqual(left,right){if(left.length!==right.length)return!1;for(let index=0;
1index<left.length;index+=1){const leftItem=left[index],rightItem=right[index];if(leftItem?.productId!==rightItem?.productId||leftItem?.quantity!==rightItem?.quantity||leftItem?.variantId!==rightItem?.variantId||leftItem?.collectionId!==rightItem?.collectionId)return!1}return!0}function subscriptionBaselineSellingPlanChanged(left,right){return left==null&&right==null?!1:left==null||right==null?left!==right:!sellingPlanIdsMatch(left,right)}export function hasSubscriptionChanges(){const{activeSubscription,subscriptionBaseline,items,sellingPlanId}=bundleStore.getState();if(!activeSubscription||!subscriptionBaseline)return!1;const currentBaseline=createSubscriptionBaseline({items,sellingPlanId});return!subscriptionBaselineItemsEqual(currentBaseline.items,subscriptionBaseline.items)||subscriptionBaselineSellingPlanChanged(currentBaseline.sellingPlanId,subscriptionBaseline.sellingPlanId)?!0:hasAddonChanges()}export function isRechargeFrequencyUpdateNotAllowedError(reason){const parts=[];if(reason instanceof Error?parts.push(reason.message):typeof reason=="string"&&parts.push(reason),reason&&typeof reason=="object"){try{parts.push(JSON.stringify(reason))}catch{}const errors=Reflect.get(reason,"errors");if(errors&&typeof errors=="object"){const general=Reflect.get(errors,"general");Array.isArray(general)&&parts.push(...general.map(item=>String(item)))}}return parts.some(part=>part.includes("Not allowed to update the frequencies"))}export const BUILDER_CATALOG_READY_TIMEOUT_MS=1e4;export function isBuilderCatalogReady(state){return state.products.length>0}export function isBuilderBundleSettingsReady(state){return state.bundleSettings!=null}export function isBuilderReady(state){return isBuilderCatalogReady(state)&&isBuilderBundleSettingsReady(state)}export function waitForBuilderCatalog(timeoutMs=BUILDER_CATALOG_READY_TIMEOUT_MS){return isBuilderCatalogReady(bundleStore.getState())?Promise.resolve():new Promise((resolve,reject)=>{let unsubscribe;const timeoutId=setTimeout(()=>{unsubscribe?.(),reject(new Error(`Bundle builder catalog did not load within ${timeoutMs}ms. Please refresh and try again.`))},timeoutMs);unsubscribe=bundleStore.subscribe(state=>{isBuilderCatalogReady(state)&&(clearTimeout(timeoutId),unsubscribe?.(),resolve())})})}export function waitForBundleSettings(timeoutMs=BUILDER_CATALOG_READY_TIMEOUT_MS){return isBuilderBundleSettingsReady(bundleStore.getState())?Promise.resolve():new Promise((resolve,reject)=>{let unsubscribe;const timeoutId=setTimeout(()=>{unsubscribe?.(),reject(new Error(`Bundle builder settings did not load within ${timeoutMs}ms. Please refresh and try again.`))},timeoutMs);unsubscribe=bundleStore.subscribe(state=>{isBuilderBundleSettingsReady(state)&&(clearTimeout(timeoutId),unsubscribe?.(),resolve())})})}export function waitForBuilderReady(timeoutMs=BUILDER_CATALOG_READY_TIMEOUT_MS){return isBuilderReady(bundleStore.getState())?Promise.resolve():new Promise((resolve,reject)=>{let unsubscribe;const timeoutId=setTimeout(()=>{unsubscribe?.(),reject(new Error(`Bundle builder did not load within ${timeoutMs}ms. Please refresh and try again.`))},timeoutMs);unsubscribe=bundleStore.subscribe(state=>{isBuilderReady(state)&&(clearTimeout(timeoutId),unsubscribe?.(),resolve())})})}export function isSoldOutForNewPurchase(productId){return getProduct(productId)?.soldOutForNewPurchase===!0}export function getBackgroundColor(productId){return getProduct(productId)?.backgroundColor}export function isBundleEditorContext(){const{activeSubscription,isEditing}=bundleStore.getState();return!!activeSubscription||isEditing}export function hasProductInCurrentBundle(productId){return bundleStore.getState().items.some(item=>item.productId===productId&&item.quantity>0)}export function isProductCardSoldOut(productId){if(isSoldOutForNewPurchase(productId))return!0;const product=getProduct(productId);if(!product)return!1;const tierVariant=getTierVariant(productId);return product.available===!1||tierVariant?.available===!1}export function isProductFullySoldOut(productId){const product=getProduct(productId);if(!product)return!1;if(isSoldOutForNewPurchase(productId))return isBundleEditorContext()?!hasProductInCurrentBundle(productId):!0;const tierVariant=getTierVariant(productId);return product.available===!1||tierVariant?.available===!1}export function isProductQuantityIncreaseLocked(productId){return isBundleEditorContext()&&isSoldOutForNewPurchase(productId)&&hasProductInCurrentBundle(productId)}
1export function hasOnetimeProperty(onetime,name,value){const properties=onetime?.properties;return Array.isArray(properties)?properties.some(property=>property?.name===name&&property?.value===value):!1}export const getLinkedAddons=subscriptionId=>{const{addons}=bundleStore.getState();return addons.filter(addon=>hasOnetimeProperty(addon,ADDON_PARENT_SUBSCRIPTION_ID_PROPERTY,String(subscriptionId)))},getAddonForVariant=variantId=>{const{addons}=bundleStore.getState(),target=String(variantId);return addons.find(addon=>{const externalVariantId=addon?.external_variant_id;if(externalVariantId==null)return!1;const value=typeof externalVariantId=="object"?externalVariantId.ecommerce:externalVariantId;return value!=null&&String(value)===target})},getAddonVariantId=addon=>{const externalVariantId=addon?.external_variant_id;if(externalVariantId==null)return null;const value=typeof externalVariantId=="object"?externalVariantId.ecommerce:externalVariantId;return value!=null?String(value):null};export function createAddonsBaseline(addons){const entries=[];for(const addon of addons??[]){const variantId=getAddonVariantId(addon),quantity=Number(addon?.quantity)||0;!variantId||quantity<=0||entries.push({variantId,quantity})}return entries.sort((left,right)=>left.variantId.localeCompare(right.variantId))}export function hasAddonChanges(){const{addons,addonsBaseline}=bundleStore.getState(),current=createAddonsBaseline(addons);if(!addonsBaseline)return current.length>0;if(current.length!==addonsBaseline.length)return!0;for(let index=0;index<current.length;index+=1){const left=current[index],right=addonsBaseline[index];if(left?.variantId!==right?.variantId||left?.quantity!==right?.quantity)return!0}return!1}export const getBoundAddons=()=>bundleStore.getState().addons.filter(addon=>(addon?.quantity??0)>0),getAddonsTotalQuantity=()=>getBoundAddons().reduce((total,addon)=>total+(Number(addon.quantity)||0),0);function rechargePriceToCents(price){if(price==null||price==="")return 0;const amount=Number(price);return Number.isFinite(amount)?Math.round(amount*100):0}export const getAddonsPriceTotals=(variantPrices={})=>{let price=0,compareAtPrice=0;for(const addon of getBoundAddons()){const quantity=Number(addon.quantity)||0;if(quantity<=0)continue;const variantId=getAddonVariantId(addon),catalog=variantId?variantPrices[variantId]:void 0,unitPrice=catalog?.price!=null&&Number.isFinite(Number(catalog.price))?Number(catalog.price):rechargePriceToCents(addon.price),catalogCompare=Number(catalog?.compareAtPrice)||0,unitCompare=catalogCompare>unitPrice?catalogCompare:unitPrice;price+=unitPrice*quantity,compareAtPrice+=unitCompare*quantity}return{price,compareAtPrice:compareAtPrice>price?compareAtPrice:0}};
2//# sourceMappingURL=/cdn/shop/t/1115/assets/bundle-builder-store-getters.js.map?v=35549827607564177421789484047

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.