import{GetAllMetaobjects,GetProductByHandle,GetProductById,GetProductOptionsById,GetProductVariantsByBatch,GetProductsByBatch,GetVariantById}from"@dna/queries";import{isStringifiedArray,splitProductName}from"@dna/utils";import"@vendor/storefront-client";const registerGlobal=window.DNARegisterGlobal;class StorefrontClient{constructor(storeDomain=__DNA_GLOBAL__.domain,apiVersion="2024-10",publicAccessToken=__DNA_GLOBAL__.storefrontToken){this.client=ShopifyStorefrontAPIClient.createStorefrontApiClient({storeDomain,apiVersion,publicAccessToken})}async getProductById(id){const response=await this.client.request(GetProductById,{variables:{id:`gid://shopify/Product/${id}`}});return cleanUpProductData(response?.data?.node)}async getProductOptionsById(id){const response=await this.client.request(GetProductOptionsById,{variables:{id:`gid://shopify/Product/${id}`}});return cleanUpProductData(response?.data?.node)}async getProductByHandle(handle,cleanUpOptions={}){const response=await this.client.request(GetProductByHandle,{variables:{handle}});return cleanUpProductData(response?.data?.product,cleanUpOptions)}async getVariantById(id){const response=await this.client.request(GetVariantById,{variables:{id:`gid://shopify/ProductVariant/${id}`}});return cleanUpVariantData(response?.data?.node)}async getProductsByBatch(ids){const structuredIds=[];for(let i=0;i[null,void 0].includes(price)?null:Number(price)*100;function stripGID(value){const gidPattern=/^gid:\/\/shopify\/\w+\//;return gidPattern.test(value)?value.replace(gidPattern,""):value}function cleanUpMetafields(rawMetafields,cleanUpOptions={}){return rawMetafields?rawMetafields.filter(m=>m!==null).reduce((acc,metafield)=>{acc[metafield.namespace]||(acc[metafield.namespace]={});let value;return Object.keys(metafield.reference||{}).includes("image")?value=metafield.reference.image.originalSrc:Object.keys(metafield.reference||{}).includes("url")?value=metafield.reference.url:isStringifiedArray(metafield.value)?value=JSON.parse(metafield.value).map(i=>stripGID(i)):Object.keys(metafield.reference||{}).includes("handle")?value=metafield.reference.handle:value=stripGID(metafield.value),acc[metafield.namespace][metafield.key]=value,acc},{}):{}}function cleanUpMetaobjects(metaobjects,cleanUpOptions={}){return Array.isArray(metaobjects)?metaobjects.map(edge=>{if(!edge||!edge.node)return console.warn("Invalid metaobject edge. Skipping."),null;const{node}=edge,{id,handle,type,updatedAt,onlineStoreUrl,fields}=node,cleanedFields=Array.isArray(fields)?fields.reduce((acc,field)=>!field||!field.key?(console.warn("Invalid field data. Skipping."),acc):(acc[field.key]=field.value,acc),{}):{};return{id:stripGID(id),handle,type,updatedAt,onlineStoreUrl,fields:cleanedFields}}).filter(Boolean):(console.warn("Invalid metaobjects data. Expected an array."),[])}function cleanUpProductData(rawProduct,cleanUpOptions={}){if(!rawProduct)return null;const variantsSortedByPrice=rawProduct.variants?.edges?.sort((a,b)=>{const priceA=Number.parseFloat(a.node.priceV2.amount),priceB=Number.parseFloat(a.node.priceV2.amount);return priceApriceB?1:0})||[],lowestPriceVariant=variantsSortedByPrice[0];let compareAtPrice=null;if(variantsSortedByPrice.length){const compareAtPriceProperty=lowestPriceVariant.node.compareAtPriceV2?.amount;compareAtPriceProperty&&(compareAtPrice=Number.parseFloat(compareAtPriceProperty))}let colorOptions=[],sizeOptions=[],giftCardOptions=[],widthOptions=[],productOptions=rawProduct.options?.map(opt=>(opt.name==="Color"&&opt.optionValues&&(colorOptions=cleanUpProductOptionData(opt.optionValues,cleanUpOptions)),opt.name==="Size"&&opt.optionValues&&(sizeOptions=cleanUpProductOptionData(opt.optionValues,cleanUpOptions)),opt.name==="Gift Card Designs"&&opt.optionValues&&(giftCardOptions=cleanUpProductOptionData(opt.optionValues,cleanUpOptions)),opt.name==="Width"&&opt.optionValues&&(widthOptions=cleanUpProductOptionData(opt.optionValues,cleanUpOptions)),opt));return productOptions={colorOptions,sizeOptions,giftCardOptions,widthOptions},{id:stripGID(rawProduct.id),available:rawProduct.availableForSale,title:rawProduct.title,description:rawProduct.descriptionHtml,minPrice:normalizePrice(rawProduct.priceRange?.minVariantPrice?.amount),maxPrice:normalizePrice(rawProduct.priceRange?.maxVariantPrice?.amount),compareAtPrice:normalizePrice(compareAtPrice),handle:rawProduct.handle,type:rawProduct.productType,vendor:rawProduct.vendor,createdAt:new Date(rawProduct.createdAt),updatedAt:new Date(rawProduct.updatedAt),publishedAt:new Date(rawProduct.publishedAt),onlineStoreUrl:rawProduct.onlineStoreUrl,tags:rawProduct.tags,media:rawProduct?.media?.edges.map(edge=>cleanUpMediaData(edge.node,cleanUpOptions)).filter(media=>media!==null),options:productOptions,collections:rawProduct.collections?.edges.map(edge=>cleanUpCollectionData(edge,cleanUpOptions)),variants:rawProduct.variants?.edges.map(edge=>cleanUpVariantData(edge.node,cleanUpOptions)),metafields:cleanUpMetafields(rawProduct.metafields,cleanUpOptions),isDiscounted:rawProduct.variants?.edges.some(variantEdge=>{const variant=variantEdge.node,originalPrice=Number.parseFloat(variant.priceV2.amount);return Number.parseFloat(variant.compareAtPriceV2?.amount)>originalPrice}),pageTitle:rawProduct.seo?.title}}function cleanUpProductsData(rawData,cleanUpOptions={}){return rawData?rawData.nodes.map(product=>cleanUpProductData(product,cleanUpOptions)):null}function cleanUpMediaData(rawMedia,cleanUpOptions={}){if(!rawMedia||rawMedia.alt?.startsWith("PDP |")&&!("allowPDPImages"in cleanUpOptions))return null;const type=rawMedia?.mediaContentType.toLowerCase();switch(type){case"image":return{type,url:rawMedia?.image?.url,alt:rawMedia?.alt};case"video":return{type,url:rawMedia?.sources[0]?.url,alt:rawMedia?.alt,poster:rawMedia?.previewImage?.url}}}function cleanUpVariantData(rawVariant,cleanUpOptions={}){return rawVariant?{id:stripGID(rawVariant?.id),title:rawVariant?.title,price:normalizePrice(rawVariant?.priceV2?.amount),compareAtPrice:normalizePrice(rawVariant?.compareAtPriceV2?.amount),currencyCode:rawVariant?.priceV2?.currencyCode,available:rawVariant?.availableForSale,sku:rawVariant?.sku,selectedOptions:rawVariant?.selectedOptions,quantityAvailable:rawVariant?.quantityAvailable,metafields:cleanUpMetafields(rawVariant?.metafields,cleanUpOptions),image:{url:rawVariant?.image?.url,alt:rawVariant?.image?.altText}}:null}function cleanUpSearchData(rawData,cleanUpOptions={}){return rawData?rawData.products.edges.map(product=>cleanUpProductData(product,cleanUpOptions)):null}function cleanUpCollectionData(rawData,cleanUpOptions){if(!rawData||!rawData.node)return null;const rawCollection=rawData.node;return{id:stripGID(rawCollection.id),title:rawCollection.title,handle:rawCollection.handle,description:rawCollection.descriptionHtml,updatedAt:new Date(rawCollection.updatedAt),publishedAt:new Date(rawCollection.publishedAt),image:rawCollection.image,products:rawCollection.products?.edges.map(edge=>cleanUpProductData(edge,cleanUpOptions)),metafields:cleanUpMetafields(rawCollection.metafields,cleanUpOptions)}}function cleanUpProductOptionData(options,cleanUpOptions={}){return options.map(option=>({available:option.firstSelectableVariant.availableForSale,color:splitProductName(option.firstSelectableVariant.product.title).color,compareAtPrice:normalizePrice(option.firstSelectableVariant.compareAtPrice?.amount),handle:option.firstSelectableVariant.product.handle,id:option.firstSelectableVariant.product.id.split("/").pop(),media:option.firstSelectableVariant.product.media.edges.map(edge=>cleanUpMediaData(edge.node,cleanUpOptions)).filter(media=>media!==null),metafields:cleanUpMetafields(option.firstSelectableVariant.product.metafields,cleanUpOptions),price:normalizePrice(option.firstSelectableVariant.price?.amount),tags:option.firstSelectableVariant.product.tags,title:splitProductName(option.firstSelectableVariant.product.title).style,url:option.firstSelectableVariant.product.onlineStoreUrl,variant_id:option.firstSelectableVariant.id.split("/").pop(),sku:option.firstSelectableVariant.sku,onlineStoreUrl:option.firstSelectableVariant.product.onlineStoreUrl,variant_title:option.firstSelectableVariant.title}))}export function mapMetaobjectsByHandle(metaobjects){return Array.isArray(metaobjects)?metaobjects.reduce((acc,metaobject)=>{if(!metaobject||!metaobject.handle)return console.warn("Invalid metaobject data. Skipping."),acc;const{handle,...rest}=metaobject;return acc[handle]=rest,acc},{}):(console.warn("Invalid metaobjects data. Expected an array."),{})}class ProfilingClient extends StorefrontClient{constructor(){super(),this.performanceEnabled=window?.performance?.mark&&window?.performance?.measure}_startRequest(name){this.performanceEnabled&&window.performance.mark(`rothys.storefront.${name}.start`)}_endRequest(name){if(this.performanceEnabled){window.performance.mark(`rothys.storefront.${name}.end`);try{window.performance.measure(`rothys.storefront.${name}`,{start:`rothys.storefront.${name}.start`,end:`rothys.storefront.${name}.end`,detail:{devtools:{track:"Storefront API",trackGroup:"Rothys"}}})}catch(e){console.error(e)}}}async getProductById(id){this._startRequest(`getProductById:${id}`);const response=await super.getProductById(id);return this._endRequest(`getProductById:${id}`),response}async getProductOptionsById(id){this._startRequest(`getProductOptionsById:${id}`);const response=await super.getProductOptionsById(id);return this._endRequest(`getProductOptionsById:${id}`),response}async getProductByHandle(handle,cleanUpOptions={}){this._startRequest(`getProductByHandle:${handle}`);const response=await super.getProductByHandle(handle,cleanUpOptions);return this._endRequest(`getProductByHandle:${handle}`),response}async getVariantById(id){this._startRequest(`getVariantById:${id}`);const response=await super.getVariantById(id);return this._endRequest(`getVariantById:${id}`),response}async getProductsByBatch(ids){this._startRequest(`getProductsByBatch:${ids}`);const response=await super.getProductsByBatch(ids);return this._endRequest(`getProductsByBatch:${ids}`),response}async getProductVariantsByBatch(ids){this._startRequest(`getProductVariantsByBatch:${ids}`);const response=await super.getProductVariantsByBatch(ids);return this._endRequest(`getProductVariantsByBatch:${ids}`),response}async GetAllMetaobjectsByType(type){this._startRequest(`GetAllMetaobjectsByType:${type}`);const response=await super.GetAllMetaobjectsByType(type);return this._endRequest(`GetAllMetaobjectsByType:${type}`),response}}export const storefrontClient=new ProfilingClient;registerGlobal(mapMetaobjectsByHandle,"mapMetaobjectsByHandle","utils"),registerGlobal(storefrontClient,"StorefrontClient"); //# sourceMappingURL=/cdn/shop/t/1163/assets/lib-storefront.js.map?v=105705156513327353201760566308