@azzas/azzas-tracker-web 2.0.0-preview.1 → 2.0.0-preview.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mod.cjs +306 -193
- package/dist/mod.cjs.map +1 -1
- package/dist/mod.d.cts +500 -18
- package/dist/mod.d.ts +500 -18
- package/dist/mod.global.js +305 -193
- package/dist/mod.global.js.map +1 -1
- package/dist/mod.js +305 -193
- package/dist/mod.js.map +1 -1
- package/dist/mod.vtex.global.js +346 -233
- package/package.json +1 -1
package/dist/mod.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/core/constants.ts","../src/pushToDatalayer.ts","../src/params/legacy/utils/index.ts","../src/params/legacy/resolvers/brand/fromOrderForm.ts","../src/params/legacy/resolvers/brand/fromItem.ts","../src/params/legacy/brand.ts","../src/params/legacy/utils/itemListAttribution.ts","../src/params/legacy/resolvers/items/fromOrderForm.ts","../src/params/legacy/resolvers/items/fromItem.ts","../src/params/legacy/resolvers/items/fromList.ts","../src/params/legacy/resolvers/items/fromPdp.ts","../src/params/legacy/resolvers/items/fromBanner.ts","../src/params/legacy/items.ts","../src/core/utils.ts","../src/params/legacy/resolvers/paymentType/fromOrderForm.ts","../src/params/legacy/resolvers/paymentType/fromOrderGroup.ts","../src/params/legacy/paymentType.ts","../src/params/userInfo.ts","../src/params/legacy/index.ts","../src/params/adapters/meta/index.ts","../src/params/adapters/deco/utils.ts","../src/params/adapters/deco/index.ts","../src/params/adapters/orderForm/index.ts","../src/params/adapters/headless/utils.ts","../src/params/adapters/headless/zones/PDP.ts","../src/params/adapters/headless/zones/PDC.ts","../src/params/adapters/headless/index.ts","../src/params/adapters/pickup/utils.ts","../src/params/adapters/pickup/index.ts","../src/formatter.ts"],"sourcesContent":["import { pushToDataLayer } from './pushToDatalayer';\nimport { getParameters } from './formatter';\nimport { EVENTS } from './core/constants';\nimport { isDebugMode } from './core/utils';\nimport type { AdapterPayload, MetaForEvent, EventName } from './types';\n\nasync function trackWebEvent<E extends EventName>(\n event: E,\n context: AdapterPayload & { meta: MetaForEvent<E>, window?: unknown }\n) {\n try {\n const parameters = await getParameters(context, event); // object data to be sent\n\n if (isDebugMode()) {\n // console.log('[DT v2] event, context e parameters: ', JSON.stringify({\n console.log(`[DT v2] ${event}, context e parameters: `, {\n context,\n parameters,\n })\n }\n\n return await pushToDataLayer(\n event,\n Object.assign({}, parameters, { window: context.window })\n );\n } catch (err) {\n return console.error(`[DT] Error tracking event ${event}:`, err);\n }\n}\n\nexport { trackWebEvent, EVENTS };\n\nexport default {\n trackWebEvent,\n EVENTS,\n}\n","export const EVENTS = {\n CUSTOM_VIEW_CART: {\n name: \"custom_view_cart\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"total_discount\",\n \"subtotal\",\n \"items\",\n ],\n } as const,\n\n ADD_TO_WISHLIST: {\n name: \"add_to_wishlist\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"items\",\n ],\n } as const,\n\n CUSTOM_ADD_TO_CART: {\n name: \"custom_add_to_cart\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"items\",\n ],\n } as const,\n\n CUSTOM_REMOVE_FROM_CART: {\n name: \"custom_remove_from_cart\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"items\",\n ],\n } as const,\n\n ADD_TO_CART: {\n name: \"add_to_cart\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"items\",\n ],\n } as const,\n\n REMOVE_FROM_CART: {\n name: \"remove_from_cart\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"items\",\n ],\n } as const,\n\n ADD_COUPON: {\n name: \"add_coupon\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"coupon\",\n \"coupon_message\",\n \"seller_cod_name\",\n ],\n } as const,\n\n SEARCH: {\n name: \"search\",\n hasEcommerce: false,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"search_term\", \"search_found\", \"search_quantity\"],\n } as const,\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n hasEcommerce: false,\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'region', 'shippings', 'zipcode', 'flag_pickup'],\n } as const,\n\n VIEW_PROMOTION: {\n name: \"view_promotion\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"currency\",\n \"promotion_name\",\n \"creative_slot\",\n \"creative_name\",\n // \"items\",\n ],\n } as const,\n\n SELECT_PROMOTION: {\n name: \"select_promotion\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"currency\",\n \"promotion_name\",\n \"creative_slot\",\n \"creative_name\",\n // \"items\",\n ],\n } as const,\n\n SELECT_CONTENT: {\n name: \"select_content\",\n hasEcommerce: false,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", 'content_type'],\n } as const,\n\n SELECT_ITEM: {\n name: \"select_item\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"region\", \"items\", \"line_items\"],\n } as const,\n\n VIEW_ITEM: {\n name: \"view_item\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"available_grid\",\n \"items\",\n ],\n } as const,\n\n CUSTOM_VIEW_ITEM: { // IO STORES\n name: \"custom_view_item\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"available_grid\",\n \"items\",\n ],\n } as const,\n\n VIEW_ITEM_LIST: {\n name: \"view_item_list\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\"region\", \"brand\", \"line_items\", \"items\"],\n } as const,\n\n BEGIN_CHECKOUT: {\n name: \"begin_checkout\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"items\"],\n } as const,\n\n CUSTOM_BEGIN_CHECKOUT: {\n name: \"custom_begin_checkout\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"items\"],\n } as const,\n\n AUTH_ACTION: {\n name: \"auth_action\",\n hasEcommerce: false,\n requiredParams: [\"region\", \"method\", \"type\", \"brand\"],\n destinations: [\"DataLayer\"],\n } as const,\n\n ADD_PERSONAL_INFO: {\n name: \"add_personal_info\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"pre_filled\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\"],\n } as const,\n\n CUSTOM_ADD_SHIPPING_INFO: {\n name: \"add_shipping_info\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"pre_filled\",\n \"shipping\",\n \"shipping_tier\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"total_discount\",\n \"subtotal\",\n \"items\"\n ],\n } as const,\n\n CUSTOM_ADD_PAYMENT_INFO: {\n name: \"add_payment_info\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"pre_filled\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"total_discount\",\n \"payment_type\",\n \"subtotal\",\n \"items\"\n ],\n } as const,\n\n ORDER_REVIEWED: {\n name: \"order_reviewed\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"payment_type\"],\n } as const,\n\n PURCHASE: {\n name: \"purchase\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n 'brand',\n 'shipping_tier',\n 'line_items',\n 'currency',\n 'value',\n 'shipping',\n 'transaction_id',\n 'total_discount',\n 'payment_type',\n 'seller_cod_name',\n 'subtotal',\n 'coupon',\n 'items'\n ],\n } as const,\n\n CUSTOM_PURCHASE: {\n name: \"custom_purchase\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n 'brand',\n 'shipping_tier',\n 'line_items',\n 'currency',\n 'value',\n 'shipping',\n 'transaction_id',\n 'total_discount',\n 'payment_type',\n 'seller_cod_name',\n 'subtotal',\n 'coupon',\n 'items'\n ],\n } as const,\n\n CUSTOM_USER_INFO: {\n name: 'custom_user_info',\n hasEcommerce: false,\n destinations: [\"DataLayer\"],\n requiredParams: ['user_info']\n } as const,\n\n NOTIFY_ME: {\n name: 'notify_me',\n hasEcommerce: false,\n destinations: [\"DataLayer\"],\n requiredParams: ['brand', 'line_items', 'size', 'item_ref']\n },\n\n REFINE_RESULTS: {\n name: 'refine_results',\n hasEcommerce: false,\n destinations: [\"DataLayer\"],\n requiredParams: ['brand', 'region', 'color', 'price_range', 'size', 'category', 'ordering']\n } as const,\n\n GRID_SIZE: {\n name: 'grid_size',\n hasEcommerce: false,\n destinations: [\"DataLayer\"],\n requiredParams: ['brand', 'slot_per_line']\n } as const\n};\n\n\ntype EventName = keyof typeof EVENTS\n// EventName = 'ADD_TO_CART' | 'ADD_TO_WISHLIST' | 'CUSTOM_VIEW_CART' | ...\n\nexport type RequiredParamsOf<E extends EventName> = typeof EVENTS[E]['requiredParams'][number]\n// type RequiredParamsOf<'ADD_TO_CART'> = \n// 'brand' | 'region' | 'line_items' | 'currency' | 'value' | 'items'","import type { EventContext, EventName } from \"./types\";\nimport { EVENTS } from \"./core/constants\";\n\nexport function pushToDataLayer(event: string, context: EventContext) {\n const targetWindow = context.window || (typeof window !== 'undefined' ? window : null);\n if (!targetWindow) return;\n\n const payload = Object.assign({}, context);\n delete payload.window; // delete window prop and avoid to push as payload to dayalayer\n\n const eventName = event.toUpperCase() as EventName;\n const eventConfig = EVENTS[eventName] as { hasEcommerce: boolean };\n\n targetWindow.dataLayer = targetWindow.dataLayer || [];\n\n if (eventConfig?.hasEcommerce) {\n targetWindow.dataLayer.push({ ecommerce: null });\n targetWindow.dataLayer.push({ event: event.toLowerCase(), ecommerce: payload });\n } else {\n targetWindow.dataLayer.push(Object.assign({ event: event.toLowerCase() }, payload));\n }\n}","/**\n * Fetches product data for the given product id from the catalog API.\n *\n * @param id - The product identifier used as the `productId` query filter\n * @returns The parsed JSON response containing product data, or `undefined` if the request fails\n */\nexport async function getProductDataById(id: any) {\n try {\n const response = await fetch(\n `/api/catalog_system/pub/products/search?fq=productId:${id}`\n );\n\n return await response.json();\n } catch (e) {\n console.log('[DT] Erro ao buscar dados do produto', e);\n }\n}\n\nexport function resizeVtexImage(url: string, width = 500, height = 500) {\n return url?.replace(\n /(\\/arquivos\\/ids\\/\\d+)-\\d+-\\d+\\//,\n `$1-${width}-${height}/`\n );\n}\n\nexport function isPDP(url: string) {\n try {\n const { pathname } = new URL(url, window.location.origin);\n return /\\/p\\/?$/.test(pathname);\n } catch {\n return false;\n }\n}\n\nexport function extractRefIdFromUrl(url: string | null) {\n if (!url) return null;\n\n const path = (() => {\n try { return new URL(url, location.origin).pathname }\n catch { return url.split('?')[0] }\n })();\n\n const match = decodeURIComponent(path).match(/(\\d+-\\d+)(?=\\/p|$)/);\n return match ? match[1].replace('-', '_') : null;\n}\n\nexport async function getProductByRefId(url: string | null) {\n const refId = extractRefIdFromUrl(url);\n if (!refId) return console.error('Não foi possível extrair o RefId da URL'), null;\n\n try {\n const res = await fetch(`/api/catalog_system/pub/products/search?fq=alternateIds_RefId:${refId}`);\n if (!res.ok) throw new Error(`Erro na API: ${res.status}`);\n\n const products = await res.json();\n return products?.[0] || null;\n } catch (err) {\n console.error('Erro ao buscar dados do produto:', err);\n return null;\n }\n}\n\nexport function getItemShippingTier(orderForm: any, item: any) {\n const info = orderForm?.shippingData?.logisticsInfo?.find(\n (li: any) => li.itemId === item.id\n );\n\n const selectedSla = info?.slas?.find((sla: any) => sla.id === info.selectedSla);\n return selectedSla?.pickupStoreInfo?.friendlyName\n ? `retirada em loja: ${selectedSla.pickupStoreInfo.friendlyName}`\n : selectedSla?.name\n ? `Receba em casa: ${selectedSla.name}`\n : null;\n}\n\nexport async function getItemSku(item: any) {\n const product = await getProductDataById(item.productId || item.productID || item.item_group_id);\n\n if (!product.length) return null;\n\n return product[0].items.find((i: any) => i.name === item.skuName)?.itemId ?? null;\n}\n\nexport function getDiscount(item: any) {\n const strategies = [\n // 1. listPrice - sellingPrice\n () => {\n if (item?.listPrice != null && item?.sellingPrice != null) {\n const diff = Math.max(item.listPrice - item.sellingPrice, 0);\n return diff ? parseFloat((diff / 100).toFixed(2)) : 0;\n }\n return null;\n },\n\n // 2. listPrice - price\n () => {\n if (item?.listPrice != null && item?.price != null) {\n return Math.max(item.listPrice - item.price, 0);\n }\n return null;\n },\n\n // 3. desconto calculado.\n () => (item?.discount || item?.discount === 0 ? item.discount : null),\n ];\n\n for (const getValue of strategies) {\n const value = getValue();\n\n if (value !== null && value !== undefined) {\n return value;\n }\n }\n\n return 0;\n}\n\nexport function getItemCategory(item: any) {\n const keywords = [\"outlet\", \"bazar\", \"sale\"];\n const regex = new RegExp(keywords.join(\"|\"), \"i\"); // cria: /outlet|bazar|sale/i\n\n const strategies = [\n () => item?.item_category,\n () => item?.category,\n () => item?.categories, \n () => item?.productCategories?.[\"39\"],\n () => {\n /* \n Regra: percorre o array itemListElement buscando a categoria de nível raiz,\n identificada por URLs no formato \"/slug/\" (apenas um nível, ex: \"/bazar/\", \"/new-collection/\").\n Retorna o `name` correspondente a esse item.\n */\n const breadcrumb = item?.itemOffered?.breadcrumbList?.itemListElement;\n\n if (!Array.isArray(breadcrumb)) return null;\n\n const level1 = breadcrumb.find((el) => {\n const path = el?.item;\n if (!path) return false;\n\n // remove \"/\" do início/fim e divide\n const parts = path.replace(/^\\/|\\/$/g, '').split('/');\n\n return parts.length === 1;\n });\n\n return level1?.name || null;\n }\n ];\n\n for (const getValue of strategies) {\n const rawValue = getValue();\n\n if (rawValue) {\n const textToTest = Array.isArray(rawValue) ? rawValue.join(\" \") : String(rawValue);\n const match = textToTest.match(regex);\n\n if (match) {\n return match[0]\n }\n }\n }\n return \"Coleção\";\n}\n\n\nfunction extractCategory2Label(item: any) {\n const keywords = [\"outlet\", \"bazar\", \"sale\"];\n const regex = new RegExp(keywords.join(\"|\"), \"i\");\n\n const tryCategory = (data: [] | {}) => {\n if (!data) return null;\n \n const items = Array.isArray(data) ? data : Object.values(data || {});\n \n // de trás pra frente pra pegar o ultimo nivel da arvore da categoria\n for (let j = items.length - 1; j >= 0; j--) {\n const parts = items[j]?.split('/')?.filter(Boolean) || [];\n\n // busca a primeira categoria (da ultima pra primeira) que NÃO seja sale/outlet/bazar\n // Ex: \"/Outlet/Blusas/\" -> ignora \"Outlet\", retorna \"Blusas\"\n for (let i = parts.length - 1; i >= 0; i--) {\n if (!regex.test(parts[i])) return parts[i];\n }\n }\n return null;\n };\n\n const sources = [item?.productCategories, item?.categories];\n return sources.reduce((result, source) => result || tryCategory(source), null);\n}\n\nexport function getItemCategory2(item: any) {\n const strategies = [\n () => item?.item_category2, \n () => extractCategory2Label(item),\n () => item?.category?.split?.('>')?.[1]?.trim?.(), // deco select_item context\n () => item?.subGrup,\n ];\n\n for (const getValue of strategies) {\n const value = getValue();\n\n if (value !== null && value !== undefined) {\n return value;\n }\n }\n\n return null;\n}\n\nexport function getItemCategory4(item: any) {\n const tags = item?.additionalInfo?.tags || item?.tags;\n return Array.isArray(tags) && tags.length ? tags.join(',') : null;\n}\n\nconst BRAND_CODES = {\n farm: 'farmrio',\n 'farm etc': 'farmetc',\n 'farm rio': 'farmrio',\n} as const;\n\ntype Standardized = keyof typeof BRAND_CODES\ninterface BrandItem {\n brand?: string;\n additionalInfo?: {\n brandName?: string;\n };\n}\n\n/**\n * Extrai o código padronizado (ex: 'farmrio') de uma única string de marca.\n * Retorna null se não houver mapeamento.\n */\nfunction getBrandCode(brand: string | undefined): string | null {\n if (!brand) return null;\n const standardized = brand.toLowerCase().trim();\n return BRAND_CODES[standardized as Standardized] || null;\n}\n\n/**\n * Função principal que padroniza a marca ou lista de marcas para o formato final:\n * 'farmrio', 'farmetc', ou 'farmrio_farmetc'.\n */\nexport function normalizeBrand(input: string | BrandItem[] | BrandItem | string[] | undefined | null) {\n let brandStrings = [];\n\n if (Array.isArray(input) && input.every(item => typeof item === 'string')) {\n brandStrings = input as string[];\n } else if (Array.isArray(input)) {\n // Se for um Array, coleta a string da marca de cada item.\n brandStrings = input.map(item => item.additionalInfo?.brandName || item.brand);\n } else if (typeof input === 'object' && input !== null && 'brand' in input) {\n // Se for um Objeto único, trata como um Array de um único item (para reuso de lógica).\n brandStrings = [(input as BrandItem).additionalInfo?.brandName || (input as BrandItem).brand];\n } else if (typeof input === 'string') {\n // Se for uma String (mal formatada ou não), trata diretamente.\n return getBrandCode(input);\n } else {\n // Se for undefined, null, ou outro tipo não esperado.\n return null;\n }\n\n const brandCodes = brandStrings\n .map(getBrandCode)\n .filter((code): code is string => code !== null); // ['farmrio', 'farmetc', 'farmrio']\n\n const uniqueSortedCodes = [...new Set(brandCodes)].sort(); // ['farmetc', 'farmrio']\n\n // Retorna a combinação ('farmrio', 'farmetc', ou 'farmrio_farmetc').\n return uniqueSortedCodes.length > 0 ? uniqueSortedCodes.join('_') : null;\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromOrderForm(context: Record<string, any>) {\n if (!context.orderForm && !context.orderForm.items?.length) return null;\n\n const items = context.orderForm.items;\n\n return normalizeBrand(items);\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromItem(context: Record<string, any>) {\n const { item } = context;\n\n return normalizeBrand(item?.additionalInfo?.brandName || item.brand || item.item_brand);\n}\n","import { brandFromOrderForm } from './resolvers/brand/fromOrderForm';\nimport { brandFromItem } from './resolvers/brand/fromItem';\nimport { normalizeBrand } from './utils';\nimport type { EventContext, EventName } from '../types';\n\n/**\n * Determines the brand for an event by using the context or extracting it based on the event type.\n *\n * Prefers `context.brand` when present; otherwise selects a resolver based on `eventName` to extract the brand.\n *\n * @param context - The event context which may already contain a `brand` or provide data for extraction\n * @param eventName - The event name used to choose the extraction strategy\n * @returns The resolved brand value, or `null` if no brand could be determined\n */\nexport function getBrand(context: EventContext, eventName: EventName) {\n if (context?.brand) return normalizeBrand(context.brand) || context.brand || null;\n\n switch (eventName) {\n case 'CUSTOM_VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\n case 'CUSTOM_ADD_SHIPPING_INFO':\n case 'CUSTOM_ADD_PAYMENT_INFO':\n case 'BEGIN_CHECKOUT':\n case 'CUSTOM_BEGIN_CHECKOUT':\n case 'SEARCH_ZIPCODE':\n case 'ORDER_REVIEWED':\n case 'PURCHASE':\n case 'CUSTOM_PURCHASE':\n return brandFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return brandFromItem(context);\n default:\n return null;\n }\n}\n","const LAST_SELECTED_ITEM_KEY = 'last_selected_item';\nconst STORAGE_VIEWED = 'last_viewed_item';\nconst CART_LIST_HISTORY_KEY = 'cart_list_history';\nconst DAY_IN_MS = 24 * 60 * 60 * 1000;\n\ninterface StoredItemMemory {\n item_id: string;\n item_list_name: string;\n timestamp: number;\n}\n\ninterface CartHistoryEntry {\n item_id: string;\n item_list_name: string;\n}\n\nfunction getStorage(): Storage | null {\n try {\n if (typeof window === 'undefined' || !window.localStorage) return null;\n return window.localStorage;\n } catch {\n return null;\n }\n}\n\nfunction parseJSON<T>(value: string | null): T | null {\n if (!value) return null;\n\n try {\n return JSON.parse(value) as T;\n } catch {\n return null;\n }\n}\n\nfunction isFreshTimestamp(timestamp: number): boolean {\n const elapsed = Date.now() - timestamp;\n return elapsed >= 0 && elapsed < DAY_IN_MS;\n}\n\nfunction isStoredItemMemory(value: unknown): value is StoredItemMemory {\n if (!value || typeof value !== 'object') return false;\n\n const candidate = value as Record<string, unknown>;\n return (\n typeof candidate.item_id === 'string' &&\n typeof candidate.item_list_name === 'string' &&\n typeof candidate.timestamp === 'number'\n );\n}\n\nfunction normalizeStoredItemMemory(value: unknown): StoredItemMemory | null {\n if (!value || typeof value !== 'object') return null;\n\n const candidate = value as Record<string, unknown>;\n const itemId = candidate.item_id;\n const itemListName = candidate.item_list_name;\n const timestamp = candidate.timestamp;\n\n if (\n typeof itemId !== 'string' ||\n typeof itemListName !== 'string' ||\n typeof timestamp !== 'number'\n ) {\n return null;\n }\n\n return {\n item_id: itemId,\n item_list_name: itemListName,\n timestamp,\n };\n}\n\nfunction resolveIdFromUnknownItem(item: Record<string, any> | null | undefined): string | null {\n const id =\n item?.productID ??\n item?.productId ??\n item?.item_group_id ??\n item?.item_id ??\n item?.id ??\n null;\n\n return id == null ? null : String(id);\n}\n\nexport function resolveItemId(item: Record<string, any> | null | undefined): string | null {\n return resolveIdFromUnknownItem(item);\n}\n\nfunction readStoredItem(key: string): StoredItemMemory | null {\n const storage = getStorage();\n if (!storage) return null;\n\n try {\n const parsed = parseJSON<unknown>(storage.getItem(key));\n const normalized = normalizeStoredItemMemory(parsed);\n return normalized && isStoredItemMemory(normalized) ? normalized : null;\n } catch {\n return null;\n }\n}\n\nfunction writeStoredItem(key: string, value: StoredItemMemory): void {\n const storage = getStorage();\n if (!storage) return;\n\n try {\n storage.setItem(key, JSON.stringify(value));\n } catch {\n // Analytics must never break storefront UI\n }\n}\n\nfunction readCartHistory(): CartHistoryEntry[] {\n const storage = getStorage();\n if (!storage) return [];\n\n try {\n const parsed = parseJSON<unknown>(storage.getItem(CART_LIST_HISTORY_KEY));\n if (!Array.isArray(parsed)) return [];\n\n return parsed.filter((entry): entry is CartHistoryEntry => (\n !!entry &&\n typeof entry === 'object' &&\n typeof (entry as Record<string, unknown>).item_id === 'string' &&\n typeof (entry as Record<string, unknown>).item_list_name === 'string'\n ));\n } catch {\n return [];\n }\n}\n\nfunction writeCartHistory(history: CartHistoryEntry[]): void {\n const storage = getStorage();\n if (!storage) return;\n\n try {\n storage.setItem(CART_LIST_HISTORY_KEY, JSON.stringify(history));\n } catch {\n // Analytics must never break storefront UI\n }\n}\n\nfunction getLatestItemListNameById(history: CartHistoryEntry[]) {\n const byId = new Map<string, string>();\n\n for (let index = history.length - 1; index >= 0; index -= 1) {\n const entry = history[index];\n if (!byId.has(entry.item_id)) {\n byId.set(entry.item_id, entry.item_list_name);\n }\n }\n\n return byId;\n}\n\nexport function saveSelectedItem(productId: string | number | null | undefined, listName: string | null | undefined) {\n if (productId == null || !listName) return;\n\n const payload: StoredItemMemory = {\n item_id: String(productId),\n item_list_name: String(listName),\n timestamp: Date.now(),\n };\n\n writeStoredItem(LAST_SELECTED_ITEM_KEY, payload);\n}\n\nexport function saveViewedItem(productId: string | number | null | undefined, listName: string | null | undefined) {\n if (productId == null) return;\n\n const payload: StoredItemMemory = {\n item_id: String(productId),\n item_list_name: String(listName ?? 'PDP'),\n timestamp: Date.now(),\n };\n\n writeStoredItem(STORAGE_VIEWED, payload);\n}\n\nexport function resolveItemListName(params: {\n event: string;\n item: Record<string, any> | null | undefined;\n itemListName: string | null | undefined;\n}) {\n const { event, item, itemListName } = params;\n const currentListName = itemListName ?? null;\n const isResolvableEvent = event === 'VIEW_ITEM' || event === 'ADD_TO_CART';\n\n if (!isResolvableEvent) return currentListName;\n const currentItemId = resolveIdFromUnknownItem(item);\n\n if (event === 'VIEW_ITEM') {\n if (!currentItemId) return 'PDP';\n\n const selectedItem = readStoredItem(LAST_SELECTED_ITEM_KEY);\n if (!selectedItem) return 'PDP';\n\n if (selectedItem.item_id === currentItemId && isFreshTimestamp(selectedItem.timestamp)) {\n return selectedItem.item_list_name;\n }\n\n return 'PDP';\n }\n\n // For add_to_cart, keep explicit non-PDP origin untouched.\n if (currentListName !== 'PDP' && currentListName !== null) return currentListName;\n if (!currentItemId) return currentListName;\n\n const viewedItem = readStoredItem(STORAGE_VIEWED);\n if (viewedItem && viewedItem.item_id === currentItemId && isFreshTimestamp(viewedItem.timestamp)) {\n return viewedItem.item_list_name;\n }\n\n return currentListName === 'PDP' ? 'PDP' : null;\n}\n\nexport function appendCartHistory(productId: string | number | null | undefined, listName: string | null | undefined) {\n if (productId == null) return;\n\n const history = readCartHistory();\n history.push({\n item_id: String(productId),\n item_list_name: listName ? String(listName) : 'PDP',\n });\n\n writeCartHistory(history);\n}\n\nexport function getCartHistoryItemListNameMap() {\n const history = readCartHistory();\n if (!history.length) return null;\n\n return getLatestItemListNameById(history);\n}\n\nexport function resolveItemListNameFromCartHistory(\n item: Record<string, any> | null | undefined,\n cartHistoryMap: Map<string, string> | null = null\n) {\n const itemId = resolveIdFromUnknownItem(item);\n const map = cartHistoryMap ?? getCartHistoryItemListNameMap();\n\n if (!itemId) return undefined;\n\n const resolved = map?.get(itemId);\n return resolved;\n}\n\nfunction pickSelectedItemFromResolvedItems(items: Record<string, any>[], source: Record<string, any>): Record<string, any> | null {\n if (!Array.isArray(items) || items.length === 0) return null;\n\n if (typeof source?.index === 'number') {\n const indexed = items.find((item) => item?.index === source.index) ?? items[source.index];\n if (indexed && typeof indexed === 'object') return indexed;\n }\n\n return items[0];\n}\n\nexport function persistSelectItemOriginFromResolvedItems(items: Record<string, any>[], source: Record<string, any>) {\n const selectedItem = pickSelectedItemFromResolvedItems(items, source);\n if (!selectedItem) return;\n\n const productId = resolveIdFromUnknownItem(selectedItem);\n const listName = selectedItem?.item_list_name ?? source?.itemListName ?? source?.item_list_name ?? null;\n saveSelectedItem(productId, listName);\n}\n","import type { EventContext } from '../../../types';\n\nimport {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n normalizeBrand,\n resizeVtexImage,\n} from '../../utils';\nimport {\n getCartHistoryItemListNameMap,\n resolveItemListNameFromCartHistory,\n} from '../../utils/itemListAttribution';\n\n/**\n * Builds an array of normalized item objects from the order form contained in the given context.\n *\n * @param context - EventContext containing an orderForm with items to convert\n * @returns An array of item-like objects derived from `context.orderForm.items`, each containing fields such as `item_id`, `price`, `quantity`, `item_sku`, `item_name`, category and variant attributes, and `discount`\n */\nexport async function itemsFromOrderForm(context: EventContext) {\n const items = context.orderForm?.items || [];\n const cartHistoryMap = getCartHistoryItemListNameMap();\n\n if (!items.length) return [];\n\n return await Promise.all(\n items.map(async (item: EventContext) => ({\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(context.orderForm, item),\n price: parseFloat((item?.price / 100).toFixed(2)) || 0,\n quantity: item.quantity || 1,\n item_ref: item.refId || null,\n item_brand: normalizeBrand(item.additionalInfo?.brandName) || item.additionalInfo?.brandName || null,\n item_sku: (await getItemSku(item)) || null,\n item_name: item?.name.replace(item?.skuName, '').trim() || item.name || null,\n item_category: getItemCategory(item) || null,\n item_variant: item?.skuName?.split(' - ')[0]?.trim() || '',\n item_variant2: item?.skuName?.split(' - ')[1]?.trim() || '',\n item_url: `https://www.farmrio.com.br${item.detailUrl}` || null,\n discount: getDiscount(item),\n image_url: resizeVtexImage(item?.image) || resizeVtexImage(item?.imageUrl) || null,\n item_list_name: resolveItemListNameFromCartHistory(item, cartHistoryMap) ?? null,\n }))\n );\n}\n","import {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n resizeVtexImage,\n} from '../../utils';\nimport { appendCartHistory, resolveItemId, resolveItemListName } from '../../utils/itemListAttribution';\n\nexport async function itemsFromItem(context: Record<string, any>, event: string) {\n const { item, orderForm, itemListName } = context;\n const resolvedListName = resolveItemListName({ event, item, itemListName });\n const resolvedItemId = resolveItemId(item);\n\n if (event === 'ADD_TO_CART') {\n appendCartHistory(resolvedItemId, resolvedListName);\n }\n\n return [\n {\n index: typeof item?.index === 'number' ? item.index : null,\n quantity: 1,\n item_id: item?.productId || item?.item_group_id || item?.item_id || item?.id || null,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: event === 'REMOVE_FROM_CART' ? getItemShippingTier(orderForm, item) : null,\n price: item?.price || 0,\n item_ref: item?.ref || item?.refId || item?.item_ref || item?.additionalProperty?.find((i: { name: string }) => i.name === \"RefId\").value || item?.itemOffered?.gtin.substring(0, item?.itemOffered?.gtin.lastIndexOf('_')) || null,\n item_brand: item?.additionalInfo?.brandName || item?.item_brand || item?.brand?.name || item?.itemOffered?.brand?.name || null,\n item_sku: item?.sku || item?.itemOffered?.sku || (await getItemSku(item)) || null,\n item_name: item?.name?.replace(item?.skuName, '').trim() || item?.name?.split(' - ').shift() || item?.item_name?.split(' - ').shift() || item?.itemOffered?.isVariantOf?.name?.split(' - ').shift() || null,\n item_category: getItemCategory(item) || null,\n // item_variant: (item?.skuName || item?.item_variant || item?.name || item?.itemOffered.name).split(/[-/]/)[0].trim() || null,\n item_variant: (item?.skuName || item?.item_variant || item?.name || item?.itemOffered.name).split(' - ')[0]?.trim() || null,\n // item_variant2: item?.size || item?.itemAttributes?.size || (item?.skuName || item?.name || item?.itemOffered.name)?.split(/[-/]/).pop()?.trim() || null,\n item_variant2: item?.size || item?.itemAttributes?.size || (item?.skuName || item?.name || item?.itemOffered.name)?.split(' - ')[1]?.trim() || null,\n discount: getDiscount(item),\n item_list_name: resolvedListName,\n\n item_url: item?.item_url || null, // add_to_cart dito\n image_url: resizeVtexImage(item?.image) || resizeVtexImage(item?.imageUrl) || null,\n },\n ];\n}\n \n","import { getDiscount, getItemCategory, getItemCategory2, normalizeBrand } from '../../utils';\n\nexport async function itemsFromList(context: Record<string, any>) {\n return (context?.list || []).map((item: any) => {\n return {\n price: item?.price?.list || item?.price || item?.offers?.lowPrice || item?.priceRange?.listPrice?.highPrice || null,\n quantity: 1,\n item_ref: item?.ref || item?.item_ref || item?.referenceId?.[0].Value || item?.productReference || item?.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value || null,\n index: typeof context?.index === 'number' ? context.index : Number(item?.index),\n item_brand: item?.item_brand ? item.item_brand : item.isNotFarm ? item?.item_brand : normalizeBrand(item?.brand?.name) || normalizeBrand(context.brand) || normalizeBrand(item?.item_brand) || null,\n item_name: item?.productName?.split(' - ').shift() || item?.alternateName?.split(' - ').shift() || item?.item_name?.split(' - ').shift() || item?.seo?.title?.split(' - ').shift() || null,\n item_category: getItemCategory(item) || null,\n item_variant: item?.name?.split(\"-\")?.[0].trim() || item?.item_variant || item?.productName?.split(\"-\")?.[1].trim() || null,\n item_category2: getItemCategory2(item) || null,\n item_id: item?.productID || item?.productId || item?.item_id || item?.id || null,\n discount: getDiscount(item) || null,\n item_list_name: context?.itemListName || null,\n }\n })\n}\n","import {\n getDiscount,\n getItemCategory,\n getItemCategory2,\n normalizeBrand,\n resizeVtexImage,\n} from '../../utils';\nimport { resolveItemId, resolveItemListName, saveViewedItem } from '../../utils/itemListAttribution';\n\nexport async function itemsFromPDP(context: Record<string, any>, event: string) {\n const { item, value, brand } = context;\n const resolvedListName = resolveItemListName({ event, item, itemListName: null });\n const resolvedItemId = resolveItemId(item);\n\n if (event === 'VIEW_ITEM') {\n saveViewedItem(resolvedItemId, resolvedListName);\n }\n\n return [\n {\n price: value || 0,\n quantity: 1,\n item_ref: item?.ref || item?.additionalProperty?.find((i: { name: string }) => i.name === \"RefId\").value || item?.productReference || null,\n item_brand: item.isNotFarm ? item?.item_brand : normalizeBrand(item?.brand.name) || normalizeBrand(brand) || null,\n item_name: item?.productName || item?.alternateName || null,\n item_category: getItemCategory(item) || null,\n item_variant: item?.name?.split(\"-\")[0].trim() || null,\n item_category2: getItemCategory2(item) || item?.category?.split(\">\")[1]?.trim() || null,\n item_id: item?.productID || item?.productId || item?.item_group_id || null,\n discount: getDiscount(item) || null,\n\n // dito/insider params view_item\n item_sku: item?.sku || item?.productId || null,\n item_url: item?.url || item?.item_url || item?.link || null,\n image_url: resizeVtexImage(item?.image) || resizeVtexImage(item?.imageUrl) || null,\n seller_id: item?.seller || null,\n item_list_name: resolvedListName,\n },\n ];\n}\n","import {\n isPDP,\n normalizeBrand,\n getItemCategory,\n getItemCategory2,\n getProductByRefId,\n extractRefIdFromUrl,\n} from '../../utils';\n\nexport async function itemsFromBanner(context: Record<string, any>) {\n const isUrlFromPDP = isPDP(context?.bannerUrl);\n\n if (!isUrlFromPDP) return [];\n\n const product = await getProductByRefId(context?.bannerUrl);\n\n const item = product?.items[0];\n\n return {\n price: item?.sellers[0].commertialOffer.Price || 0,\n quantity: 1,\n item_ref: extractRefIdFromUrl(context?.bannerUrl),\n item_brand: normalizeBrand(product.brand) || null,\n item_name: product?.productName || product?.alternateName || product?.item_name || null,\n item_category: getItemCategory(product) || null,\n item_variant: item?.name?.split(\"-\").pop().trim() || null,\n item_category2: getItemCategory2(product) || null,\n item_id: product?.productId || null,\n discount: item?.sellers[0].commertialOffer.ListPrice - item?.sellers[0].commertialOffer.Price || null,\n }\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\nimport { itemsFromList } from './resolvers/items/fromList';\nimport { itemsFromPDP } from './resolvers/items/fromPdp';\nimport { itemsFromBanner } from './resolvers/items/fromBanner';\nimport { persistSelectItemOriginFromResolvedItems } from './utils/itemListAttribution';\n\n/**\n * Selects the appropriate item resolver based on the event name and returns its result.\n *\n * @param context - Runtime context passed to the selected resolver\n * @param eventName - Event identifier that determines which resolver to use\n * @returns The resolved items for the event, or `null` if the event is not recognized\n */\nexport function getItems(context: Record<string, any>, eventName: string) {\n if (context?.items) return context.items;\n\n switch (eventName) {\n case 'CUSTOM_VIEW_CART':\n case 'BEGIN_CHECKOUT':\n case 'CUSTOM_BEGIN_CHECKOUT':\n case 'CUSTOM_ADD_SHIPPING_INFO':\n case 'CUSTOM_ADD_PAYMENT_INFO':\n case 'PURCHASE':\n case 'CUSTOM_PURCHASE':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'ADD_TO_WISHLIST':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context, eventName);\n case 'SELECT_ITEM':\n return itemsFromList(context).then((items) => {\n persistSelectItemOriginFromResolvedItems(items, context);\n return items;\n });\n case 'VIEW_ITEM_LIST':\n return itemsFromList(context)\n case 'VIEW_ITEM':\n case 'CUSTOM_VIEW_ITEM':\n return itemsFromPDP(context, eventName)\n case 'VIEW_PROMOTION':\n case 'SELECT_PROMOTION':\n return itemsFromBanner(context)\n default:\n return null;\n }\n}\n","export const isDebugMode = () => {\n if (typeof window === 'undefined') return false;\n\n try {\n const params = new URLSearchParams(window.location.search);\n return params.has('__trk_inspect__');\n } catch {\n // fallback para ambientes sem URLSearchParams\n return window.location.search.indexOf('__trk_inspect__') !== -1;\n }\n};\n\nexport function setCookie(name: string, value: string, days = 7) {\n const encodedValue = encodeURIComponent(value);\n\n let expires = \"\";\n if (days) {\n const date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = \"; expires=\" + date.toUTCString();\n }\n\n document.cookie = `${name}=${encodedValue}${expires}; path=/;`;\n}\n\nexport const paymentTypeMap = [\n ['vale', 'vale crédito'],\n ['pagaleve', 'pix'],\n ['pix parcel', 'pix parcelado'],\n ['pix', 'pix'],\n ['apple', 'apple pay'],\n ['google', 'google pay'],\n ['boleto', 'boleto'],\n ['paypal', 'paypal'],\n ['cred', 'cartão'],\n ['visa', 'cartão'],\n ['master', 'cartão'],\n ['amex', 'cartão'],\n ['elo', 'cartão'],\n ['hiper', 'cartão'],\n ['diner', 'cartão'],\n ['deb', 'cartão'],\n];\n\n\nexport const toNum = (val: unknown) => typeof val === 'string' ? Number(val.replace(/[^\\d,]/g, '').replace(',', '.')) : val\n\nexport const documentToHash = async (document: string | undefined): Promise<string | null> => {\n if (!document) return null\n\n const encoder = new TextEncoder();\n const data = encoder.encode(document);\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n\n return hashArray.map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nconst SIZE_ORDER: Record<string, string[]> = {\n alfabetico: ['PP', 'P', 'M', 'G', 'GG', 'XG', 'XGG', 'EG', 'EGG', '3G', '4G', '5G'],\n infantil: ['RN', '0-3M', '3-6M', '6-9M', '9-12M', '12-18M', '18-24M', 'P', 'M', 'G', 'GG'],\n}\n\nconst detectSizeType = (sizes: string[]): 'alfabetico' | 'numerico' | 'infantil' | 'desconhecido' => {\n if (sizes.every(s => /^\\d+([.,]\\d+)?$/.test(s))) return 'numerico'\n if (sizes.some(s => /^(RN|\\d+-\\d+M|\\d+M)$/i.test(s))) return 'infantil'\n if (sizes.every(s => SIZE_ORDER.alfabetico.includes(s.toUpperCase()))) return 'alfabetico'\n return 'desconhecido'\n}\n\nexport const sortSizes = (sizes: string[]): string[] => {\n const unique = [...new Set(sizes.filter(Boolean))]\n const type = detectSizeType(unique)\n\n if (type === 'numerico') {\n return unique.sort((a, b) => parseFloat(a) - parseFloat(b))\n }\n\n if (type === 'alfabetico' || type === 'infantil') {\n const order = SIZE_ORDER[type]\n return unique.sort((a, b) => {\n const ia = order.indexOf(a.toUpperCase())\n const ib = order.indexOf(b.toUpperCase())\n return (ia === -1 ? 999 : ia) - (ib === -1 ? 999 : ib)\n })\n }\n\n return unique\n}\n\nexport const capitalize = (str: string): string => str ? str[0].toUpperCase() + str.slice(1).toLowerCase() : \"\";\n","import { paymentTypeMap } from \"../../../../core/utils\";\n\nexport function paymentTypeFromOrderForm(context: Record<string, any>) {\n if (context.payment_type) return context.payment_type;\n if (!context.orderForm) return null;\n\n const payments = context.orderForm.paymentData?.payments || [];\n const systems = context.orderForm.paymentData?.paymentSystems || [];\n if (!payments.length || !systems.length) return null;\n\n const selectedPayment = payments.find((p: { paymentSystem: string }) => p?.paymentSystem) || payments[0];\n const id = String(selectedPayment?.paymentSystem || '').trim();\n if (!id) return null;\n\n const system = systems.find((s: { id: string }) => String(s.id) === id);\n const name = system?.name?.toLowerCase() || '';\n const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n return match ? match[1] : null;\n}\n","import { paymentTypeMap } from \"../../../../core/utils\";\n\nexport function paymentTypeFromOrderGroup(context: Record<string, any>) {\n if (!context.orderForm) return null;\n\n const transactions = context.orderForm.paymentData?.transactions || [];\n if (!transactions.length) return null;\n\n const payments = transactions[0]?.payments || [];\n if (!payments.length) return null;\n\n const name = payments[0]?.paymentSystemName?.toLowerCase() || '';\n const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n return match ? match[1] : null;\n}\n","import { paymentTypeFromOrderForm } from './resolvers/paymentType/fromOrderForm';\nimport { paymentTypeFromOrderGroup } from './resolvers/paymentType/fromOrderGroup';\n\n/**\n * Selects the appropriate payment_type resolver based on the event name and returns its result.\n *\n * @param context - Runtime context passed to the selected resolver\n * @param eventName - Event identifier that determines which resolver to use\n * @returns The resolved payment_type for the event, or `null` if the event is not recognized\n */\nexport function getPaymentType(context: Record<string, any>, eventName: string) {\n if (context?.paymentType) return context.paymentType;\n\n switch (eventName) {\n case 'ORDER_REVIEWED':\n case 'CUSTOM_ADD_PAYMENT_INFO':\n return paymentTypeFromOrderForm(context);\n case 'PURCHASE':\n case 'CUSTOM_PURCHASE':\n return paymentTypeFromOrderGroup(context)\n default:\n return null;\n }\n}\n","import { documentToHash } from \"../core/utils\";\n\n // list of domains to avoid cors erros to fetch VTEX IO endpoint\n const PROD_DOMAINS: Record<string, Record<string, string>> = {\n \"animale\": {\n \"store\": \"https://www.animale.com.br\",\n \"checkout\": \"https://secure.animale.com.br\",\n },\n \"farm\": {\n \"store\": \"https://lojafarm.myvtex.com\"\n },\n \"mariafilo\": {\n \"store\": \"https://mariafilo.myvtex.com\",\n \"checkout\": \"https://secure.mariafilo.com.br\",\n },\n \"lojacrisbarros\": {\n \"store\": \"https://lojacrisbarros.myvtex.com\",\n \"checkout\": \"https://secure.crisbarros.com.br\",\n },\n \"lojaoffpremium\": {\n \"store\": \"https://lojaoffpremium.myvtex.com\",\n \"checkout\": \"https://secure.offpremium.com.br\",\n },\n \"bynv\": {\n \"store\": \"https://bynv.myvtex.com\",\n },\n \"fabula\": {\n \"store\": \"https://lojafabula.myvtex.com\",\n },\n };\n\ntype ManuallyInfoContext = {\n cpf: string\n birthDate: string\n phone: string\n firstName: string\n lastName: string\n email: string\n email_optin?: boolean\n}\n\ntype UserInfoContext = {\n account: keyof typeof PROD_DOMAINS\n platform: 'store' | 'checkout'\n userEmail: string\n userId?: string\n manuallyInfo?: ManuallyInfoContext\n}\n\nexport async function getUserInfo(context: UserInfoContext) {\n const domain = PROD_DOMAINS[context.account || 'animale']?.[context.platform || 'store'];\n\n if (!domain) return { customer: { email: context.userEmail, id: context?.userId }, address: null };\n\n try {\n const api = `${domain}/_v/user-info`;\n const response = await fetch(api, {\n method: 'POST',\n body: JSON.stringify({ email: context.userEmail })\n });\n\n if (response.status !== 200) {\n // profile/edit and checkout route; we get the info directly from the input text\n if (context?.manuallyInfo && context.manuallyInfo?.cpf) {\n const { cpf, birthDate, phone, firstName, lastName, email, email_optin } = context.manuallyInfo\n const document = cpf?.replace(/\\D/g, '')\n const hashedDocument = await documentToHash(document)\n\n return {\n address: null,\n customer: {\n email,\n phone,\n document,\n lastName,\n birthDate,\n firstName,\n email_optin,\n homePhone: phone,\n cpf: hashedDocument,\n }\n };\n }\n\n return { customer: { email: context.userEmail, id: context?.userId }, address: null };\n }\n\n const res = await response.json();\n const document = res?.customer?.document?.replace(/\\D/g, '')\n const hashedDocument = await documentToHash(document)\n\n return { ...res, customer: { ...res.customer, cpf: hashedDocument, document } }\n } catch (_) {\n // profile/edit and checkout route; we get the info directly from the input text\n if (context?.manuallyInfo && context.manuallyInfo?.cpf) {\n const { cpf, birthDate, phone, firstName, lastName, email, email_optin } = context.manuallyInfo\n const document = cpf?.replace(/\\D/g, '')\n const hashedDocument = await documentToHash(document)\n\n return {\n address: null,\n customer: {\n email,\n phone,\n document,\n lastName,\n birthDate,\n firstName,\n email_optin,\n homePhone: phone,\n cpf: hashedDocument,\n }\n };\n }\n\n return { customer: { email: context.userEmail, id: context?.userId }, address: null };\n }\n}","import type { EventContext, EventName, LogisticInfo } from '../../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\nimport { getPaymentType } from './paymentType';\nimport { getUserInfo } from '../userInfo';\nimport { toNum } from '../../core/utils';\n\n\nexport const legacyGetters = {\n brand: getBrand,\n\n items: getItems,\n\n payment_type: getPaymentType,\n\n user_info: getUserInfo, // global\n\n content_type: (context: EventContext, eventName: EventName) => {\n if (context?.content_type) return context.content_type;\n\n return `regiao`\n .concat(':' + context.category)\n .concat(context.subcategory ? ':' + context.subcategory : '')\n .concat(':' + context.componentName) || null\n },\n\n region: (context: EventContext, eventName: EventName) => {\n return context.region || null;\n },\n\n line_items: (context: EventContext, eventName: EventName) => {\n if (context?.lineItems) return context.lineItems;\n\n if (context?.item) {\n return [context.item.productId || context.item.productID || context.item.item_id];\n }\n\n if (context?.list) {\n return context.list.map((item: { productID: string, id: string, productId: string }) => item?.productID || item?.id || item?.productId)\n }\n\n return (context.orderForm.items || [])\n .map((item: EventContext) => item.productId)\n .join(',');\n },\n\n currency: (context: EventContext, eventName: EventName) => {\n if (context?.currency) return context.currency\n\n if (context?.bannerUrl) return 'BRL'\n\n if (context?.item) {\n return context.item?.offers?.priceCurrency || 'BRL'\n }\n\n return context.orderForm?.storePreferencesData?.currencyCode || null;\n },\n\n value: (context: EventContext, eventName: EventName) => {\n if (context?.value) return toNum(context.value)\n\n return context.item ? toNum(context.item?.price) : context.orderForm?.value != null\n ? context.orderForm.value / 100\n : null;\n },\n\n total_discount: (context: EventContext, eventName: EventName) => {\n if (context?.totalDiscount) return context.totalDiscount\n\n const totalsList = context.orderForm?.totalizers || context.orderForm?.totals || []; // totals for ordergroup and orderform have different names\n const items = context.orderForm.items;\n const totalDiscount = items.reduce((acc: number, item: { quantity: number, listPrice: number, sellingPrice: number }) => {\n const unitDiscount = Math.max(0, item.listPrice - item.sellingPrice);\n return acc + (unitDiscount * item.quantity);\n }, 0);\n\n const discounts = totalsList.find((t: { id: string }) => t.id === 'Discounts');\n return Math.abs((discounts?.value || 0) + totalDiscount) / 100 || null;\n },\n\n subtotal: (context: EventContext, eventName: EventName) => {\n const totalsList = context.orderForm?.totalizers || context.orderForm?.totals || []; // totals for ordergroup and orderform have different names\n\n const subtotal =\n totalsList\n .filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: number, t: EventContext) => acc + (t.value || 0), 0) / 100 || 0;\n\n return subtotal\n },\n\n coupon_message: (context: EventContext, eventName: EventName) => {\n if (context.couponMessage) return context.couponMessage;\n\n const messages = context.orderForm?.messages || [];\n\n if (messages.length === 0) return null;\n\n const couponMessages = messages.filter((msg: EventContext) =>\n msg.text.toLowerCase().includes('cupom')\n );\n\n if (couponMessages.length === 0) return null;\n\n return couponMessages.map((msg: EventContext) => msg.text).join(' | ');\n },\n\n seller_cod_name: (context: EventContext, eventName: EventName) => {\n return context.appliedSellerCodName || context?.orderForm.marketingData.utmiCampaign || null;\n },\n\n coupon: (context: EventContext, eventName: EventName) => {\n return context.appliedCoupon || context?.orderForm?.marketingData?.coupon || null;\n },\n\n pre_filled: (context: EventContext, eventName: EventName) => {\n return !!context.preFilled;\n },\n\n search_term: (context: EventContext, eventName: EventName) => {\n return context.searchTerm || null;\n },\n\n search_found: (context: EventContext, eventName: EventName) => {\n return !!context.searchFound;\n },\n\n search_quantity: (context: EventContext, eventName: EventName) => {\n return context.searchQuantity || 0;\n },\n\n promotion_name: (context: EventContext, eventName: EventName) => {\n return context.promotionName || null;\n },\n\n creative_name: (context: EventContext, eventName: EventName) => {\n return context.creativeName || null;\n },\n\n creative_slot: (context: EventContext, eventName: EventName) => {\n return context.creativeSlot || null;\n },\n\n zipcode: (context: EventContext, eventName: EventName) => {\n return context.zipCode || null;\n },\n\n size: (context: EventContext, eventName: EventName) => {\n return context.size || null;\n },\n\n item_ref: (context: EventContext, eventName: EventName) => {\n return context.itemRef || null;\n },\n\n flag_pickup: (context: EventContext, eventName: EventName) => {\n const orderForm = context.orderForm;\n if (!orderForm) return null;\n\n const logisticsInfo = orderForm.shippingData?.logisticsInfo || [];\n const hasPickup = logisticsInfo.some((info: LogisticInfo) =>\n info.slas?.some((sla) => sla.deliveryChannel === 'pickup-in-point')\n );\n\n return hasPickup\n },\n\n shippings: (context: EventContext, eventName: EventName) => {\n const orderForm = context.orderForm;\n if (!orderForm) return null;\n\n const groupShipping: Record<string, any> = {};\n\n for (const info of orderForm.shippingData.logisticsInfo) {\n const item = orderForm.items[info.itemIndex]\n if (!item) continue\n\n for (const sla of info.slas) {\n const key = sla.name\n\n if (!groupShipping[key]) {\n groupShipping[key] = {\n shipping_tier: sla.name,\n delivery_time: parseInt(sla.shippingEstimate),\n shipping: parseFloat((sla.price / 100).toFixed(1)),\n line_items: []\n }\n }\n\n groupShipping[key].line_items.push(item.id)\n }\n }\n\n const shippings = Object.values(groupShipping).map((s) => ({\n shipping: s.shipping,\n shipping_tier: s.shipping_tier,\n delivery_time: s.delivery_time,\n line_items: s.line_items.join(',')\n }))\n\n return shippings || null\n },\n\n shipping: (context: EventContext, eventName: EventName) => {\n const logistics = context?.orderForm?.shippingData?.logisticsInfo ?? []\n return logistics.reduce((total: number, item: any) => {\n const selected = item.slas?.find((sla: any) => sla.id === item.selectedSla)\n return total + (selected?.price ?? 0)\n }, 0)\n },\n\n shipping_tier: (context: EventContext, eventName: EventName) => {\n const logistics = context?.orderForm?.shippingData?.logisticsInfo ?? []\n const selectedSlas = logistics\n .map((item: {\n selectedSla?: string,\n slas?: Array<{\n id: string,\n deliveryChannel: string,\n name?: string,\n pickupStoreInfo?: { friendlyName?: string }\n }>\n }) => {\n if (!item.selectedSla) return null;\n return item.slas?.find((sla) => sla.id === item.selectedSla) || null;\n })\n .filter(Boolean) as Array<{\n deliveryChannel: string,\n name?: string,\n pickupStoreInfo?: { friendlyName?: string }\n }>;\n\n if (selectedSlas.length === 0) return null;\n\n const uniqueTiers = Array.from(\n new Map(\n selectedSlas.map((sla) => {\n const key = sla.deliveryChannel === 'pickup-in-point'\n ? `pickup:${sla.pickupStoreInfo?.friendlyName || sla.name || ''}`\n : `delivery:${sla.name || ''}`;\n return [key, sla];\n })\n ).values()\n );\n\n const sortedTiers = uniqueTiers.sort((a, b) => {\n const aOrder = a.deliveryChannel === 'pickup-in-point' ? 0 : 1;\n const bOrder = b.deliveryChannel === 'pickup-in-point' ? 0 : 1;\n if (aOrder !== bOrder) return aOrder - bOrder;\n\n const aLabel = a.deliveryChannel === 'pickup-in-point'\n ? (a.pickupStoreInfo?.friendlyName || a.name || '')\n : (a.name || '');\n const bLabel = b.deliveryChannel === 'pickup-in-point'\n ? (b.pickupStoreInfo?.friendlyName || b.name || '')\n : (b.name || '');\n\n return aLabel.localeCompare(bLabel, 'pt-BR');\n });\n\n const shippingTier = sortedTiers\n .map((sla) => (\n sla.deliveryChannel === 'pickup-in-point'\n ? `retirada em loja${sla.pickupStoreInfo?.friendlyName ? `: ${sla.pickupStoreInfo.friendlyName}` : ''}`\n : sla.deliveryChannel === 'delivery'\n ? `receba em casa${sla.name ? `: ${sla.name}` : ''}`\n : null\n ))\n .filter(Boolean)\n .join(', ');\n\n return shippingTier || null;\n },\n\n transaction_id: (context: EventContext, eventName: EventName) => {\n return context.orderForm?.orderGroup?.toString() || null;\n },\n\n available_grid: (context: EventContext, eventName: EventName) => {\n return context.availableGrid || null;\n },\n\n method: (context: EventContext, eventName: EventName) => {\n return context.method || null;\n },\n\n type: (context: EventContext, eventName: EventName) => {\n return context.type || null;\n },\n}","import { getUserInfo } from \"../../userInfo\";\nimport type { EventContext } from \"../../../types\";\nimport type {\n MetaRegionContext,\n MetaBrandContext,\n MetaPromotionNameContext,\n MetaCreativeSlotContext,\n MetaCreativeNameContext,\n MetaContentTypeContext,\n MetaSlotPerLineContext,\n MetaSearchTermContext,\n MetaSearchFoundContext,\n MetaSearchQuantityContext,\n} from './types'\n\n\nexport const metaAdapters = {\n user_info: getUserInfo,\n\n brand: (context: MetaBrandContext) => {\n return context.meta.brand || null;\n },\n\n content_type: (context: MetaContentTypeContext) => {\n return context.meta.content_type || null;\n },\n\n region: (context: MetaRegionContext) => {\n return context.meta.region || null;\n },\n\n pre_filled: (context: EventContext): boolean => {\n return !!context.preFilled;\n },\n\n currency: (context: EventContext): string | null => {\n if (context?.currency) return context.currency\n return 'BRL'\n },\n\n slot_per_line: (context: MetaSlotPerLineContext): number | null => {\n return context.meta.slot_per_line ?? null;\n },\n\n search_term: (context: MetaSearchTermContext) => {\n return context.meta.search_term || null;\n },\n\n search_found: (context: MetaSearchFoundContext): boolean | null => {\n return context.meta.search_found || null\n },\n\n search_quantity: (context: MetaSearchQuantityContext): number | null => {\n return context.meta.search_quantity || 0;\n },\n\n promotion_name: (context: MetaPromotionNameContext) => {\n return context.meta.promotion_name || null;\n },\n\n creative_name: (context: MetaCreativeNameContext) => {\n return context.meta.creative_name || null;\n },\n\n creative_slot: (context: MetaCreativeSlotContext) => {\n return context.meta.creative_slot || null;\n },\n\n size: (context: EventContext) => {\n return context.size || null;\n },\n\n item_ref: (context: EventContext) => {\n return context.itemRef || null;\n },\n\n method: (context: EventContext) => {\n return context.method || null;\n },\n\n type: (context: EventContext) => {\n return context.type || null;\n },\n\n color: (context: EventContext) => {\n return context.meta.color || null;\n },\n\n price_range: (context: EventContext) => {\n return context.meta.price_range || null;\n },\n\n category: (context: EventContext) => {\n return context.meta.category || null;\n },\n\n ordering: (context: EventContext) => {\n return context.meta.ordering || null;\n },\n}","import type { Product, ItemCategory } from \"./types\";\nimport { capitalize } from \"../../../core/utils\";\n\nexport const getItemCategory = (item: Product): ItemCategory => {\n const value = item?.category;\n if (!value) return \"Coleção\";\n\n const text = Array.isArray(value) ? value.join(\" \") : String(value);\n const match = text.match(/outlet|bazar|sale/i)?.[0].toLowerCase();\n return (match as ItemCategory) ?? \"Coleção\";\n};\n\nexport const getItemCategory2 = (item: Product): string => {\n const AVOID_CATEGORIES = /^(outlet|bazar|sale)$/i;\n const categories = item.category?.split(\">\") ?? [];\n const last = categories[categories.length - 1] ?? \"\";\n const validHierarchy = last\n .split(\"/\")\n .filter((c: string) => c && !AVOID_CATEGORIES.test(c));\n const deepest = validHierarchy[validHierarchy.length - 1] ?? \"\";\n return capitalize(deepest);\n};\n\n\nexport const resizeVtexImage = (url: string | undefined, width = 500, height = 500) => {\n return url?.replace(\n /(\\/arquivos\\/ids\\/\\d+)-\\d+-\\d+\\//,\n `$1-${width}-${height}/`\n );\n}\n\n// Tipo de envio do pedido por item. Exemplos: “retirada em loja” e “receba em casa”. Caso tenha disponível a informação da loja de retirada ou o modelo de entrega em casa (normal, rápida, expresso…) colocar com “:” na frente como detalhamento, exemplo “retirada em loja: FARM SHOPPING LEBLON” ou “Receba em casa: expresso”.\nexport function getItemShippingTier() {\n // const info = orderForm?.shippingData?.logisticsInfo?.find(\n // (li: any) => li.itemId === item.id\n // );\n\n // const selectedSla = info?.slas?.find((sla: any) => sla.id === info.selectedSla);\n // return selectedSla?.pickupStoreInfo?.friendlyName\n // ? `retirada em loja: ${selectedSla.pickupStoreInfo.friendlyName}`\n // : selectedSla?.name\n // ? `Receba em casa: ${selectedSla.name}`\n // : null;\n\n return null\n}","import type { EventContext } from '../../../types';\nimport { metaAdapters } from '../meta';\nimport { resizeVtexImage, getItemCategory, getItemCategory2, getItemShippingTier } from './utils';\n\nimport type {\n DecoAvailableGridContext,\n // DecoBrandContext,\n DecoItemsContext,\n DecoLineItemsContext,\n DecoValueContext,\n ItemsResponse,\n PropertyValue,\n Product,\n} from \"./types\";\nimport { sortSizes } from '../../../core/utils';\n\nconst IN_STOCK_SCHEMA = \"https://schema.org/InStock\";\nconst LIST_PRICE_SCHEMA = \"https://schema.org/ListPrice\"\n\nexport const decoAdapter = {\n ...metaAdapters, // global adapters\n\n items: (context: DecoItemsContext): ItemsResponse[] | null => {\n if (context?.items) return context.items\n\n if (context?.products) {\n return context.products.map((item: Product) => {\n const COLOR_REGEX = /^[^_]+_/ // do começo da string, captura tudo que não é underscore, até achar um underscore.\n const listPrice = item?.offers?.offers?.[0].priceSpecification.find((s) =>\n s.priceType === LIST_PRICE_SCHEMA\n )?.price\n\n return {\n quantity: 1,\n index: item?.index ?? 0,\n item_brand: item.brand?.name?.toLowerCase() ?? null,\n item_name: item.alternateName ?? null,\n price: item.offers?.lowPrice ?? null,\n discount: Number(listPrice) - Number(item?.offers?.lowPrice),\n item_variant: item?.name?.split(' - ')[0]?.replace(COLOR_REGEX, '').replace(/_/g, ' ') || null, // cor\n item_variant2: item?.name?.split(' - ')[1] ?? null, // tamanho\n item_shipping_tier: getItemShippingTier(),\n item_ref: item.additionalProperty?.find(((i: PropertyValue) => i.name === \"RefId\"))?.value ?? null,\n item_category: getItemCategory(item) ?? null,\n item_category2: getItemCategory2(item) ?? null,\n item_id: item?.inProductGroupWithID ?? null,\n item_sku: item.sku ?? null,\n item_url: item.url ?? null,\n image_url: resizeVtexImage(item?.image?.[0].url) ?? null,\n seller_id: item.offers?.offers?.[0]?.seller ?? null,\n item_list_name: item?.item_list_name ?? null,\n }\n })\n }\n\n return null\n },\n\n // brand: (context: DecoBrandContext) => {\n // if (context?.brand) return context.brand\n // if (context?.products) {\n // return context.products[0].brand?.name // tem que ajustar FARM por conta de FARM_ETC\n // }\n // return null\n // },\n\n line_items: (context: DecoLineItemsContext): string[] | null => {\n if (context?.line_items) return context.line_items;\n\n if (context?.products) {\n return context.products\n .map((item: Product) => item?.inProductGroupWithID)\n .filter((id): id is string => Boolean(id))\n }\n\n return null;\n },\n\n value: (context: DecoValueContext): number | null => {\n if (context?.value) return context.value\n\n if (context?.products) {\n return context.products\n .map((item: Product) => item.offers?.lowPrice)\n .filter((price): price is number => price !== undefined)\n .reduce((sum, price) => sum + price, 0)\n }\n\n return null\n },\n\n available_grid: (context: DecoAvailableGridContext): string | null => {\n if (context?.available_grid) return context.available_grid\n\n if (context?.products) {\n const sizes = context.products\n .flatMap((product: Product) =>\n product.isVariantOf?.hasVariant?.filter((variant) =>\n variant.offers?.offers?.some((o) => o.availability === IN_STOCK_SCHEMA)\n )\n .map((variant) => variant.name?.split(' - ')[1])\n .filter((name): name is string => Boolean(name)) ?? []\n )\n const result = sortSizes(sizes).join(\",\").trim()\n\n return result || null\n }\n\n return null;\n },\n}","import { EventContext, LogisticInfo } from \"../../../types\";\nimport { getPaymentType } from \"../../legacy/paymentType\";\n\nexport const orderFormAdapters = {\n // orderform \n payment_type: getPaymentType,\n\n total_discount: (context: EventContext) => {\n if (context?.totalDiscount) return context.totalDiscount\n\n const totalsList = context.orderForm?.totalizers || context.orderForm?.totals || []; // totals for ordergroup and orderform have different names\n const items = context.orderForm.items;\n const totalDiscount = items.reduce((acc: number, item: { quantity: number, listPrice: number, sellingPrice: number }) => {\n const unitDiscount = Math.max(0, item.listPrice - item.sellingPrice);\n return acc + (unitDiscount * item.quantity);\n }, 0);\n\n const discounts = totalsList.find((t: { id: string }) => t.id === 'Discounts');\n return Math.abs((discounts?.value || 0) + totalDiscount) / 100 || null;\n },\n\n subtotal: (context: EventContext) => {\n const totalsList = context.orderForm?.totalizers || context.orderForm?.totals || []; // totals for ordergroup and orderform have different names\n\n const subtotal =\n totalsList\n .filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: number, t: EventContext) => acc + (t.value || 0), 0) / 100 || 0;\n\n return subtotal\n },\n\n coupon_message: (context: EventContext) => {\n if (context.couponMessage) return context.couponMessage;\n\n const messages = context.orderForm?.messages || [];\n\n if (messages.length === 0) return null;\n\n const couponMessages = messages.filter((msg: EventContext) =>\n msg.text.toLowerCase().includes('cupom')\n );\n\n if (couponMessages.length === 0) return null;\n\n return couponMessages.map((msg: EventContext) => msg.text).join(' | ');\n },\n\n flag_pickup: (context: EventContext) => {\n const orderForm = context.orderForm;\n if (!orderForm) return null;\n\n const logisticsInfo = orderForm.shippingData?.logisticsInfo || [];\n const hasPickup = logisticsInfo.some((info: LogisticInfo) =>\n info.slas?.some((sla) => sla.deliveryChannel === 'pickup-in-point')\n );\n\n return hasPickup\n },\n\n shippings: (context: EventContext) => {\n const orderForm = context.orderForm;\n if (!orderForm) return null;\n\n const groupShipping: Record<string, any> = {};\n\n for (const info of orderForm.shippingData.logisticsInfo) {\n const item = orderForm.items[info.itemIndex]\n if (!item) continue\n\n for (const sla of info.slas) {\n const key = sla.name\n\n if (!groupShipping[key]) {\n groupShipping[key] = {\n shipping_tier: sla.name,\n delivery_time: parseInt(sla.shippingEstimate),\n shipping: parseFloat((sla.price / 100).toFixed(1)),\n line_items: []\n }\n }\n\n groupShipping[key].line_items.push(item.id)\n }\n }\n\n const shippings = Object.values(groupShipping).map((s) => ({\n shipping: s.shipping,\n shipping_tier: s.shipping_tier,\n delivery_time: s.delivery_time,\n line_items: s.line_items.join(',')\n }))\n\n return shippings || null\n },\n\n shipping: (context: EventContext) => {\n const logistics = context?.orderForm?.shippingData?.logisticsInfo ?? []\n return logistics.reduce((total: number, item: any) => {\n const selected = item.slas?.find((sla: any) => sla.id === item.selectedSla)\n return total + (selected?.price ?? 0)\n }, 0)\n },\n\n shipping_tier: (context: EventContext) => {\n const logistics = context?.orderForm?.shippingData?.logisticsInfo ?? []\n const selectedSlas = logistics\n .map((item: {\n selectedSla?: string,\n slas?: Array<{\n id: string,\n deliveryChannel: string,\n name?: string,\n pickupStoreInfo?: { friendlyName?: string }\n }>\n }) => {\n if (!item.selectedSla) return null;\n return item.slas?.find((sla) => sla.id === item.selectedSla) || null;\n })\n .filter(Boolean) as Array<{\n deliveryChannel: string,\n name?: string,\n pickupStoreInfo?: { friendlyName?: string }\n }>;\n\n if (selectedSlas.length === 0) return null;\n\n const uniqueTiers = Array.from(\n new Map(\n selectedSlas.map((sla) => {\n const key = sla.deliveryChannel === 'pickup-in-point'\n ? `pickup:${sla.pickupStoreInfo?.friendlyName || sla.name || ''}`\n : `delivery:${sla.name || ''}`;\n return [key, sla];\n })\n ).values()\n );\n\n const sortedTiers = uniqueTiers.sort((a, b) => {\n const aOrder = a.deliveryChannel === 'pickup-in-point' ? 0 : 1;\n const bOrder = b.deliveryChannel === 'pickup-in-point' ? 0 : 1;\n if (aOrder !== bOrder) return aOrder - bOrder;\n\n const aLabel = a.deliveryChannel === 'pickup-in-point'\n ? (a.pickupStoreInfo?.friendlyName || a.name || '')\n : (a.name || '');\n const bLabel = b.deliveryChannel === 'pickup-in-point'\n ? (b.pickupStoreInfo?.friendlyName || b.name || '')\n : (b.name || '');\n\n return aLabel.localeCompare(bLabel, 'pt-BR');\n });\n\n const shippingTier = sortedTiers\n .map((sla) => (\n sla.deliveryChannel === 'pickup-in-point'\n ? `retirada em loja${sla.pickupStoreInfo?.friendlyName ? `: ${sla.pickupStoreInfo.friendlyName}` : ''}`\n : sla.deliveryChannel === 'delivery'\n ? `receba em casa${sla.name ? `: ${sla.name}` : ''}`\n : null\n ))\n .filter(Boolean)\n .join(', ');\n\n return shippingTier || null;\n },\n\n transaction_id: (context: EventContext) => {\n return context.orderForm?.orderGroup?.toString() || null;\n },\n\n coupon: (context: EventContext) => {\n return context.appliedCoupon || context?.orderForm?.marketingData?.coupon || null;\n },\n\n seller_cod_name: (context: EventContext) => {\n return context.appliedSellerCodName || context?.orderForm.marketingData.utmiCampaign || null;\n },\n};","import { Product } from \"./types\";\n\n// adapter IS util functions\nexport const getItemCategory = (item: Product) => {\n const keywords = [\"outlet\", \"bazar\", \"sale\"];\n const regex = new RegExp(keywords.join(\"|\"), \"i\"); // cria: /outlet|bazar|sale/i\n\n const value = item?.categories\n\n if (value) {\n const textToTest = Array.isArray(value) ? value.join(\" \") : String(value);\n const match = textToTest.match(regex);\n\n if (match) {\n return match[0].toLowerCase();\n }\n }\n return \"Coleção\";\n}\n\nexport const getItemCategory2 = (item: Product): string => {\n const avoidList = /outlet|bazar|sale/i;\n const lastCategory = item.categories?.[item.categories.length - 1] ?? \"\";\n const categoryHierarchy = lastCategory.split(\"/\").filter(Boolean);\n const deepestCategory = [...categoryHierarchy].reverse().find(c => !avoidList.test(c)) ?? \"\";\n return deepestCategory && deepestCategory[0].toUpperCase() + deepestCategory.slice(1).toLowerCase();\n};\n\nexport function resizeVtexImage(url: string, width = 500, height = 500) {\n return url?.replace(\n /(\\/arquivos\\/ids\\/\\d+)-\\d+-\\d+\\//,\n `$1-${width}-${height}/`\n );\n}","import { getItemCategory, getItemCategory2, resizeVtexImage } from '../utils'\nimport type { ItemsResponse, ProductType_PDP } from \"../types\";\n\nexport type HeadlessItemsPDPContext = {\n products?: ProductType_PDP[]\n items?: ItemsResponse[]\n}\nexport type HeadlessValuePDPContext = {\n products?: ProductType_PDP[]\n value?: number\n}\nexport type HeadlessLineItemsPDPContext = {\n products?: ProductType_PDP[]\n line_items?: string[]\n}\nexport type HeadlessBrandPDPContext = {\n products?: ProductType_PDP[]\n brand?: string\n}\n\nexport const HeadlessPdpZone = {\n items: (context: HeadlessItemsPDPContext): ItemsResponse[] | null => {\n if (context?.items) return context.items\n\n if (context?.products) {\n return context.products.map((item) => {\n const listPrice = item?.items[0].sellers?.[0].commertialOffer.ListPrice\n const price = item?.items[0].sellers?.[0].commertialOffer.Price\n\n return {\n quantity: 1,\n index: item?.index ?? null,\n item_brand: item.brand ?? null,\n item_name: item.productName ?? null,\n price: price ?? null,\n discount: Number(listPrice) - Number(price),\n item_variant: item.items[0]?.name?.split(\" - \")[0] ?? null,\n item_variant2: item.items[0]?.name?.split(\" - \")[1] ?? null,\n item_ref: item.productReference ?? null, // sem ref no retorno do IS na multi-lib produtos PDC\n item_category: getItemCategory(item),\n item_category2: getItemCategory2(item) ?? null,\n item_id: item?.productId ?? null,\n item_sku: item.items?.[0].itemId ?? null,\n item_url: item.link ?? null, // sem link/url no retorno do IS na multi-lib produtos PDC\n image_url: resizeVtexImage(item?.items?.[0].images?.[0].imageUrl) ?? null,\n seller_id: item.items?.[0]?.sellers?.[0].sellerId ?? null,\n item_list_name: item.item_list_name ?? null,\n }\n })\n }\n\n return null;\n },\n\n value: (context: HeadlessValuePDPContext): number | null => {\n if (context?.value) return context.value\n\n if (context?.products) {\n return context.products\n .map((item) => item?.items[0].sellers?.[0].commertialOffer.Price)\n .filter((price): price is number => price !== undefined)\n .reduce((sum, price) => sum + price, 0)\n }\n\n return null\n },\n\n line_items: (context: HeadlessLineItemsPDPContext): string[] | null => {\n if (context?.line_items) return context.line_items;\n\n if (context?.products) {\n return context.products\n .map((item) => item.productId)\n .filter((id): id is string => Boolean(id))\n }\n\n return null;\n },\n\n brand: (context: HeadlessBrandPDPContext): string | null => {\n if (context?.brand) return context.brand\n\n if (context?.products) {\n return context.products.map((p) => p.brand).join().trim()\n }\n\n return null\n },\n}","import type { ProductType_PDC } from \"../types\"\nimport type { ItemsResponse } from \"../types\";\nimport { getItemCategory, getItemCategory2, resizeVtexImage } from '../utils'\n\nexport type HeadlessItemsPDCContext = {\n products?: ProductType_PDC[]\n items?: ItemsResponse[]\n}\nexport type HeadlessValuePDCContext = {\n products?: ProductType_PDC[]\n value?: number\n}\nexport type HeadlessLineItemsPDCContext = {\n products?: ProductType_PDC[]\n line_items?: string[]\n}\nexport type HeadlessLineBrandPDCContext = {\n products?: ProductType_PDC[]\n brand?: string\n}\n\nexport const HeadlessPdcZone = {\n items: (context: HeadlessItemsPDCContext): ItemsResponse[] | null => {\n if (context?.items) return context.items\n\n if (context?.products) {\n return context.products.map((item) => {\n const listPrice = item.offers.highPrice\n const price = item.offers.lowPrice\n\n return {\n quantity: 1,\n index: item?.index ?? 0,\n item_brand: item.brand.name ?? null,\n item_name: item.name ?? null,\n price: price ?? null,\n discount: Number(listPrice) - Number(price),\n item_variant: item.isVariantOf?.hasVariant?.[0].name.split(\" - \")[0] ?? null,\n item_variant2: (item.additionalProperty ?? []).find((p) => p.name === 'Tamanho')?.value as string ?? null,\n item_ref: null, // sem ref no retorno do IS na multi-lib produtos PDC\n item_category: getItemCategory(item),\n item_category2: getItemCategory2(item) ?? null,\n item_id: item.isVariantOf.productGroupID ?? null,\n item_sku: item.sku ?? null,\n item_url: null, // sem link/url no retorno do IS na multi-lib produtos PDC\n image_url: resizeVtexImage(item?.image?.[0].url) ?? null,\n seller_id: item.offers?.offers?.find(o => o.availability)?.seller?.identifier ?? null,\n item_list_name: item.item_list_name ?? null,\n }\n })\n }\n\n return null;\n },\n\n value: (context: HeadlessValuePDCContext): number | null => {\n if (context?.value) return context.value\n\n if (context?.products) {\n return context.products\n .map((item) => item.offers.lowPrice)\n .filter((price): price is number => price !== undefined)\n .reduce((sum, price) => sum + price, 0)\n }\n\n return null\n },\n\n line_items: (context: HeadlessLineItemsPDCContext): string[] | null => {\n if (context?.line_items) return context.line_items;\n\n if (context?.products) {\n return context.products\n .map((item) => item.id)\n .filter((id): id is string => Boolean(id))\n }\n\n return null;\n },\n\n brand: (context: HeadlessLineBrandPDCContext): string | null => {\n if (context?.brand) return context.brand\n\n if (context?.products) {\n return context.products.map((p) => p.brand.name).join().trim()\n }\n\n return null\n },\n}","import type { EventContext } from \"../../../types\";\nimport { sortSizes } from \"../../../core/utils\";\n\nimport { metaAdapters } from \"../meta\"\nimport { orderFormAdapters } from \"../orderForm\"\n\nimport {\n HeadlessPdpZone,\n type HeadlessItemsPDPContext,\n type HeadlessLineItemsPDPContext\n} from \"./zones/PDP\"\nimport {\n HeadlessPdcZone,\n type HeadlessItemsPDCContext,\n type HeadlessLineItemsPDCContext,\n type HeadlessLineBrandPDCContext\n} from \"./zones/PDC\"\n\nimport type {\n HeadlessBrandContext,\n HeadlessLineItemsContext,\n HeadlessValueContext,\n HeadlessAvailableGridContext,\n HeadlessItemsContext,\n} from \"./types\"\n\n\nexport const headlessAdapter = {\n ...metaAdapters, // global adapters\n\n ...orderFormAdapters, // orderForm adapters, confirmar se no storefront tem evento que usa essses params\n\n brand: (context: HeadlessBrandContext) => {\n if (context.zone === 'PDP') {\n return HeadlessPdpZone.brand(context as HeadlessLineItemsPDPContext)\n }\n\n if (context.zone === 'PDC') {\n return HeadlessPdcZone.brand(context as HeadlessLineBrandPDCContext)\n }\n\n return null\n },\n\n line_items: (context: HeadlessLineItemsContext): string[] | null => {\n if (context.zone === 'PDP') {\n return HeadlessPdpZone.line_items(context as HeadlessLineItemsPDPContext)\n }\n\n if (context.zone === 'PDC') {\n return HeadlessPdcZone.line_items(context as HeadlessLineItemsPDCContext)\n }\n\n return null\n },\n\n value: (context: HeadlessValueContext): number | null => {\n if (context.zone === 'PDP') {\n return HeadlessPdpZone.value(context as HeadlessItemsPDPContext)\n }\n\n if (context.zone === 'PDC') {\n return HeadlessPdcZone.value(context as HeadlessItemsPDCContext)\n }\n\n return null;\n },\n\n items: (context: HeadlessItemsContext) => {\n if (context.zone === 'PDP') {\n return HeadlessPdpZone.items(context as HeadlessItemsPDPContext)\n }\n\n if (context.zone === 'PDC') {\n return HeadlessPdcZone.items(context as HeadlessItemsPDCContext)\n }\n },\n\n // param used only in one Zone, the PDP; no need condition\n available_grid: (context: HeadlessAvailableGridContext): string | null => {\n if (context?.available_grid) return context.available_grid\n\n if (context?.products) {\n const sizes = context.products.flatMap(p => p.items.map(i => i.Tamanho[0]))\n const result = sortSizes(sizes).join(',')\n return result || null\n }\n\n return null;\n },\n}\n","import { SelectedDeliveryChannel, Sla } from \"./types\";\n\nexport const getShippingTier = (sla: Sla): string => {\n const isPickup = sla.deliveryChannel === SelectedDeliveryChannel.PickupInPoint;\n\n if (isPickup) {\n const storeName = sla.pickupStoreInfo?.friendlyName?.trim();\n return storeName\n ? `retirada em loja: ${storeName}`\n : \"retirada em loja\";\n }\n\n return sla.name\n ? `receba em casa: ${sla.name.toLowerCase()}`\n : \"receba em casa\";\n}\n\n\nexport const getDeliveryTime = (sla: Sla): number => {\n const estimate = sla.shippingEstimate;\n if (!estimate) return 0;\n\n const days = parseInt(estimate, 10);\n return isNaN(days) ? 0 : days;\n}","import { metaAdapters } from \"../meta\"\nimport type { PickupFlagPickupContext, PickupShippingsContext, PickupZipcodeContext } from \"./types\";\nimport { getShippingTier, getDeliveryTime } from \"./utils\";\n\ntype ShippingsResponse = {\n shipping: number;\n shipping_tier: string;\n line_items: string;\n delivery_time: number;\n};\n\nexport const pickupAdapter = {\n\n ...metaAdapters,\n\n flag_pickup: (context: PickupFlagPickupContext): boolean | null => {\n return context?.flag_pickup ?? null;\n },\n\n shippings: (context: PickupShippingsContext): ShippingsResponse[] | null => {\n if (context.shippings) {\n return context.shippings.map((s) => ({\n line_items: s.line_items ?? '',\n shipping: s.price ?? 0,\n shipping_tier: getShippingTier(s),\n delivery_time: getDeliveryTime(s),\n }))\n }\n\n return null;\n },\n\n zipcode: (context: PickupZipcodeContext) => {\n return context.zipcode ?? null;\n },\n}","import { EVENTS } from './core/constants';\nimport { legacyGetters } from './params/legacy';\nimport { decoAdapter } from './params/adapters/deco';\nimport { headlessAdapter } from './params/adapters/headless';\nimport { pickupAdapter } from './params/adapters/pickup';\nimport type { EventName, AdapterPayload } from './types';\n\ntype GetterFn = (context: unknown, e?: EventName) => unknown\ntype EventRequiredParams = { requiredParams: string[] } | undefined;\n\nconst adapters = {\n DECO: decoAdapter,\n HEADLESS: headlessAdapter,\n PICKUP: pickupAdapter,\n} as const;\n\ntype AdapterKey = keyof typeof adapters\n\nexport async function getParameters(context: AdapterPayload, eventName: EventName) {\n const eventConfig = EVENTS[eventName] as EventRequiredParams;\n if (!eventConfig) return;\n\n const currentAdapter = context.adapter;\n const getters = adapters[currentAdapter as AdapterKey] ?? legacyGetters // fallback for legacy;\n\n const entries = await Promise.all(\n eventConfig.requiredParams.map(async (param) => {\n const getter = getters[param as keyof typeof getters] as GetterFn;\n\n if (typeof getter !== 'function') {\n console.error(`[DT] Missing getter \"${param}\" for adapter \"${currentAdapter}\"`);\n return [param, null] as const;\n }\n\n return [param, await getter(context, eventName)] as const;\n })\n );\n\n return Object.fromEntries(entries);\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,SAAS;AAAA,EACpB,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,yBAAyB;AAAA,IACvB,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,YAAY;AAAA,IACV,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB,CAAC,SAAS,eAAe,gBAAgB,iBAAiB;AAAA,EAC5E;AAAA,EAEA,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB,CAAC,SAAS,UAAU,aAAa,WAAW,aAAa;AAAA,EAC3E;AAAA,EAEA,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,IAEF;AAAA,EACF;AAAA,EAEA,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,IAEF;AAAA,EACF;AAAA,EAEA,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB,CAAC,SAAS,cAAc;AAAA,EAC1C;AAAA,EAEA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB,CAAC,SAAS,UAAU,SAAS,YAAY;AAAA,EAC3D;AAAA,EAEA,WAAW;AAAA,IACT,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,kBAAkB;AAAA;AAAA,IAChB,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB,CAAC,UAAU,SAAS,cAAc,OAAO;AAAA,EAC3D;AAAA,EAEA,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB,CAAC,SAAS,cAAc,YAAY,SAAS,kBAAkB,YAAY,OAAO;AAAA,EACpG;AAAA,EAEA,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB,CAAC,SAAS,cAAc,YAAY,SAAS,kBAAkB,YAAY,OAAO;AAAA,EACpG;AAAA,EAEA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,cAAc;AAAA,IACd,gBAAgB,CAAC,UAAU,UAAU,QAAQ,OAAO;AAAA,IACpD,cAAc,CAAC,WAAW;AAAA,EAC5B;AAAA,EAEA,mBAAmB;AAAA,IACjB,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB,CAAC,SAAS,cAAc,cAAc,YAAY,SAAS,kBAAkB,UAAU;AAAA,EACzG;AAAA,EAEA,0BAA0B;AAAA,IACxB,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,yBAAyB;AAAA,IACvB,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB,CAAC,SAAS,cAAc,YAAY,SAAS,kBAAkB,YAAY,cAAc;AAAA,EAC3G;AAAA,EAEA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB,CAAC,WAAW;AAAA,EAC9B;AAAA,EAEA,WAAW;AAAA,IACT,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAgB,CAAC,SAAS,cAAc,QAAQ,UAAU;AAAA,EAC5D;AAAA,EAEA,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAiB,CAAC,SAAS,UAAU,SAAS,eAAe,QAAQ,YAAY,UAAU;AAAA,EAC7F;AAAA,EAEA,WAAW;AAAA,IACT,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc,CAAC,WAAW;AAAA,IAC1B,gBAAiB,CAAC,SAAS,eAAe;AAAA,EAC5C;AACF;;;ACzUO,SAAS,gBAAgB,OAAe,SAAuB;AACpE,QAAM,eAAe,QAAQ,WAAW,OAAO,WAAW,cAAc,SAAS;AACjF,MAAI,CAAC,aAAc;AAEnB,QAAM,UAAU,OAAO,OAAO,CAAC,GAAG,OAAO;AACzC,SAAO,QAAQ;AAEf,QAAM,YAAY,MAAM,YAAY;AACpC,QAAM,cAAc,OAAO,SAAS;AAEpC,eAAa,YAAY,aAAa,aAAa,CAAC;AAEpD,MAAI,2CAAa,cAAc;AAC7B,iBAAa,UAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAC/C,iBAAa,UAAU,KAAK,EAAE,OAAO,MAAM,YAAY,GAAG,WAAW,QAAQ,CAAC;AAAA,EAChF,OAAO;AACL,iBAAa,UAAU,KAAK,OAAO,OAAO,EAAE,OAAO,MAAM,YAAY,EAAE,GAAG,OAAO,CAAC;AAAA,EACpF;AACF;;;ACfA,eAAsB,mBAAmB,IAAS;AAChD,MAAI;AACF,UAAM,WAAW,MAAM;AAAA,MACrB,wDAAwD,EAAE;AAAA,IAC5D;AAEA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B,SAAS,GAAG;AACV,YAAQ,IAAI,wCAAwC,CAAC;AAAA,EACvD;AACF;AAEO,SAAS,gBAAgB,KAAa,QAAQ,KAAK,SAAS,KAAK;AACtE,SAAO,2BAAK;AAAA,IACV;AAAA,IACA,MAAM,KAAK,IAAI,MAAM;AAAA;AAEzB;AAEO,SAAS,MAAM,KAAa;AACjC,MAAI;AACF,UAAM,EAAE,SAAS,IAAI,IAAI,IAAI,KAAK,OAAO,SAAS,MAAM;AACxD,WAAO,UAAU,KAAK,QAAQ;AAAA,EAChC,SAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,oBAAoB,KAAoB;AACtD,MAAI,CAAC,IAAK,QAAO;AAEjB,QAAM,QAAQ,MAAM;AAClB,QAAI;AAAE,aAAO,IAAI,IAAI,KAAK,SAAS,MAAM,EAAE;AAAA,IAAS,SAC9C;AAAE,aAAO,IAAI,MAAM,GAAG,EAAE,CAAC;AAAA,IAAE;AAAA,EACnC,GAAG;AAEH,QAAM,QAAQ,mBAAmB,IAAI,EAAE,MAAM,oBAAoB;AACjE,SAAO,QAAQ,MAAM,CAAC,EAAE,QAAQ,KAAK,GAAG,IAAI;AAC9C;AAEA,eAAsB,kBAAkB,KAAoB;AAC1D,QAAM,QAAQ,oBAAoB,GAAG;AACrC,MAAI,CAAC,MAAO,QAAO,QAAQ,MAAM,+CAAyC,GAAG;AAE7E,MAAI;AACF,UAAM,MAAM,MAAM,MAAM,iEAAiE,KAAK,EAAE;AAChG,QAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,gBAAgB,IAAI,MAAM,EAAE;AAEzD,UAAM,WAAW,MAAM,IAAI,KAAK;AAChC,YAAO,qCAAW,OAAM;AAAA,EAC1B,SAAS,KAAK;AACZ,YAAQ,MAAM,oCAAoC,GAAG;AACrD,WAAO;AAAA,EACT;AACF;AAEO,SAAS,oBAAoB,WAAgB,MAAW;AA9D/D;AA+DE,QAAM,QAAO,kDAAW,iBAAX,mBAAyB,kBAAzB,mBAAwC;AAAA,IACnD,CAAC,OAAY,GAAG,WAAW,KAAK;AAAA;AAGlC,QAAM,eAAc,kCAAM,SAAN,mBAAY,KAAK,CAAC,QAAa,IAAI,OAAO,KAAK;AACnE,WAAO,gDAAa,oBAAb,mBAA8B,gBACjC,qBAAqB,YAAY,gBAAgB,YAAY,MAC7D,2CAAa,QACX,mBAAmB,YAAY,IAAI,KACnC;AACR;AAEA,eAAsB,WAAW,MAAW;AA3E5C;AA4EE,QAAM,UAAU,MAAM,mBAAmB,KAAK,aAAa,KAAK,aAAa,KAAK,aAAa;AAE/F,MAAI,CAAC,QAAQ,OAAQ,QAAO;AAE5B,UAAO,mBAAQ,CAAC,EAAE,MAAM,KAAK,CAAC,MAAW,EAAE,SAAS,KAAK,OAAO,MAAzD,mBAA4D,WAA5D,YAAsE;AAC/E;AAEO,SAAS,YAAY,MAAW;AACrC,QAAM,aAAa;AAAA;AAAA,IAEjB,MAAM;AACJ,WAAI,6BAAM,cAAa,SAAQ,6BAAM,iBAAgB,MAAM;AACzD,cAAM,OAAO,KAAK,IAAI,KAAK,YAAY,KAAK,cAAc,CAAC;AAC3D,eAAO,OAAO,YAAY,OAAO,KAAK,QAAQ,CAAC,CAAC,IAAI;AAAA,MACtD;AACA,aAAO;AAAA,IACT;AAAA;AAAA,IAGA,MAAM;AACJ,WAAI,6BAAM,cAAa,SAAQ,6BAAM,UAAS,MAAM;AAClD,eAAO,KAAK,IAAI,KAAK,YAAY,KAAK,OAAO,CAAC;AAAA,MAChD;AACA,aAAO;AAAA,IACT;AAAA;AAAA,IAGA,OAAO,6BAAM,cAAY,6BAAM,cAAa,IAAI,KAAK,WAAW;AAAA,EAClE;AAEA,aAAW,YAAY,YAAY;AACjC,UAAM,QAAQ,SAAS;AAEvB,QAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,gBAAgB,MAAW;AACzC,QAAM,WAAW,CAAC,UAAU,SAAS,MAAM;AAC3C,QAAM,QAAQ,IAAI,OAAO,SAAS,KAAK,GAAG,GAAG,GAAG;AAEhD,QAAM,aAAa;AAAA,IACjB,MAAM,6BAAM;AAAA,IACZ,MAAM,6BAAM;AAAA,IACZ,MAAM,6BAAM;AAAA,IACZ,MAAG;AA7HP;AA6HU,gDAAM,sBAAN,mBAA0B;AAAA;AAAA,IAChC,MAAM;AA9HV;AAoIM,YAAM,cAAa,wCAAM,gBAAN,mBAAmB,mBAAnB,mBAAmC;AAEtD,UAAI,CAAC,MAAM,QAAQ,UAAU,EAAG,QAAO;AAEvC,YAAM,SAAS,WAAW,KAAK,CAAC,OAAO;AACrC,cAAM,OAAO,yBAAI;AACjB,YAAI,CAAC,KAAM,QAAO;AAGlB,cAAM,QAAQ,KAAK,QAAQ,YAAY,EAAE,EAAE,MAAM,GAAG;AAEpD,eAAO,MAAM,WAAW;AAAA,MAC1B,CAAC;AAED,cAAO,iCAAQ,SAAQ;AAAA,IACzB;AAAA,EACF;AAEA,aAAW,YAAY,YAAY;AACjC,UAAM,WAAW,SAAS;AAE1B,QAAI,UAAU;AACZ,YAAM,aAAa,MAAM,QAAQ,QAAQ,IAAI,SAAS,KAAK,GAAG,IAAI,OAAO,QAAQ;AACjF,YAAM,QAAQ,WAAW,MAAM,KAAK;AAEpC,UAAI,OAAO;AACT,eAAO,MAAM,CAAC;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAGA,SAAS,sBAAsB,MAAW;AACxC,QAAM,WAAW,CAAC,UAAU,SAAS,MAAM;AAC3C,QAAM,QAAQ,IAAI,OAAO,SAAS,KAAK,GAAG,GAAG,GAAG;AAEhD,QAAM,cAAc,CAAC,SAAkB;AA1KzC;AA2KI,QAAI,CAAC,KAAM,QAAO;AAElB,UAAM,QAAQ,MAAM,QAAQ,IAAI,IAAI,OAAO,OAAO,OAAO,QAAQ,CAAC,CAAC;AAGnE,aAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC1C,YAAM,UAAQ,iBAAM,CAAC,MAAP,mBAAU,MAAM,SAAhB,mBAAsB,OAAO,aAAY,CAAC;AAIxD,eAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC1C,YAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,EAAG,QAAO,MAAM,CAAC;AAAA,MAC3C;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,CAAC,6BAAM,mBAAmB,6BAAM,UAAU;AAC1D,SAAO,QAAQ,OAAO,CAAC,QAAQ,WAAW,UAAU,YAAY,MAAM,GAAG,IAAI;AAC/E;AAEO,SAAS,iBAAiB,MAAW;AAC1C,QAAM,aAAa;AAAA,IACjB,MAAM,6BAAM;AAAA,IACZ,MAAM,sBAAsB,IAAI;AAAA,IAChC,MAAG;AApMP;AAoMU,wEAAM,aAAN,mBAAgB,UAAhB,4BAAwB,SAAxB,mBAA+B,OAA/B,mBAAmC,SAAnC;AAAA;AAAA;AAAA,IACN,MAAM,6BAAM;AAAA,EACd;AAEA,aAAW,YAAY,YAAY;AACjC,UAAM,QAAQ,SAAS;AAEvB,QAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,iBAAiB,MAAW;AAnN5C;AAoNE,QAAM,SAAO,kCAAM,mBAAN,mBAAsB,UAAQ,6BAAM;AACjD,SAAO,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,KAAK,KAAK,GAAG,IAAI;AAC/D;AAEA,IAAM,cAAc;AAAA,EAClB,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,YAAY;AACd;AAcA,SAAS,aAAa,OAA0C;AAC9D,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,eAAe,MAAM,YAAY,EAAE,KAAK;AAC9C,SAAO,YAAY,YAA4B,KAAK;AACtD;AAMO,SAAS,eAAe,OAAuE;AApPtG;AAqPE,MAAI,eAAe,CAAC;AAEpB,MAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,UAAQ,OAAO,SAAS,QAAQ,GAAG;AACzE,mBAAe;AAAA,EACjB,WAAW,MAAM,QAAQ,KAAK,GAAG;AAE/B,mBAAe,MAAM,IAAI,UAAK;AA3PlC,UAAAA;AA2PqC,eAAAA,MAAA,KAAK,mBAAL,gBAAAA,IAAqB,cAAa,KAAK;AAAA,KAAK;AAAA,EAC/E,WAAW,OAAO,UAAU,YAAY,UAAU,QAAQ,WAAW,OAAO;AAE1E,mBAAe,GAAE,WAAoB,mBAApB,mBAAoC,cAAc,MAAoB,KAAK;AAAA,EAC9F,WAAW,OAAO,UAAU,UAAU;AAEpC,WAAO,aAAa,KAAK;AAAA,EAC3B,OAAO;AAEL,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,aAChB,IAAI,YAAY,EAChB,OAAO,CAAC,SAAyB,SAAS,IAAI;AAEjD,QAAM,oBAAoB,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC,EAAE,KAAK;AAGxD,SAAO,kBAAkB,SAAS,IAAI,kBAAkB,KAAK,GAAG,IAAI;AACtE;;;AC7QO,SAAS,mBAAmB,SAA8B;AAFjE;AAGE,MAAI,CAAC,QAAQ,aAAa,GAAC,aAAQ,UAAU,UAAlB,mBAAyB,QAAQ,QAAO;AAEnE,QAAM,QAAQ,QAAQ,UAAU;AAEhC,SAAO,eAAe,KAAK;AAC7B;;;ACNO,SAAS,cAAc,SAA8B;AAF5D;AAGE,QAAM,EAAE,KAAK,IAAI;AAEjB,SAAO,iBAAe,kCAAM,mBAAN,mBAAsB,cAAa,KAAK,SAAS,KAAK,UAAU;AACxF;;;ACQO,SAAS,SAAS,SAAuB,WAAsB;AACpE,MAAI,mCAAS,MAAO,QAAO,eAAe,QAAQ,KAAK,KAAK,QAAQ,SAAS;AAE7E,UAAQ,WAAW;AAAA,IACjB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,mBAAmB,OAAO;AAAA,IACnC,KAAK;AAAA,IACL,KAAK;AACH,aAAO,cAAc,OAAO;AAAA,IAC9B;AACE,aAAO;AAAA,EACX;AACF;;;ACpCA,IAAM,yBAAyB;AAC/B,IAAM,iBAAiB;AACvB,IAAM,wBAAwB;AAC9B,IAAM,YAAY,KAAK,KAAK,KAAK;AAajC,SAAS,aAA6B;AACpC,MAAI;AACF,QAAI,OAAO,WAAW,eAAe,CAAC,OAAO,aAAc,QAAO;AAClE,WAAO,OAAO;AAAA,EAChB,SAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,UAAa,OAAgC;AACpD,MAAI,CAAC,MAAO,QAAO;AAEnB,MAAI;AACF,WAAO,KAAK,MAAM,KAAK;AAAA,EACzB,SAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,iBAAiB,WAA4B;AACpD,QAAM,UAAU,KAAK,IAAI,IAAI;AAC7B,SAAO,WAAW,KAAK,UAAU;AACnC;AAEA,SAAS,mBAAmB,OAA2C;AACrE,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAEhD,QAAM,YAAY;AAClB,SACE,OAAO,UAAU,YAAY,YAC7B,OAAO,UAAU,mBAAmB,YACpC,OAAO,UAAU,cAAc;AAEnC;AAEA,SAAS,0BAA0B,OAAyC;AAC1E,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAEhD,QAAM,YAAY;AAClB,QAAM,SAAS,UAAU;AACzB,QAAM,eAAe,UAAU;AAC/B,QAAM,YAAY,UAAU;AAE5B,MACE,OAAO,WAAW,YAClB,OAAO,iBAAiB,YACxB,OAAO,cAAc,UACrB;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB;AAAA,EACF;AACF;AAEA,SAAS,yBAAyB,MAA6D;AA1E/F;AA2EE,QAAM,MACJ,0DAAM,cAAN,YACA,6BAAM,cADN,YAEA,6BAAM,kBAFN,YAGA,6BAAM,YAHN,YAIA,6BAAM,OAJN,YAKA;AAEF,SAAO,MAAM,OAAO,OAAO,OAAO,EAAE;AACtC;AAEO,SAAS,cAAc,MAA6D;AACzF,SAAO,yBAAyB,IAAI;AACtC;AAEA,SAAS,eAAe,KAAsC;AAC5D,QAAM,UAAU,WAAW;AAC3B,MAAI,CAAC,QAAS,QAAO;AAErB,MAAI;AACF,UAAM,SAAS,UAAmB,QAAQ,QAAQ,GAAG,CAAC;AACtD,UAAM,aAAa,0BAA0B,MAAM;AACnD,WAAO,cAAc,mBAAmB,UAAU,IAAI,aAAa;AAAA,EACrE,SAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,gBAAgB,KAAa,OAA+B;AACnE,QAAM,UAAU,WAAW;AAC3B,MAAI,CAAC,QAAS;AAEd,MAAI;AACF,YAAQ,QAAQ,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,EAC5C,SAAQ;AAAA,EAER;AACF;AAEA,SAAS,kBAAsC;AAC7C,QAAM,UAAU,WAAW;AAC3B,MAAI,CAAC,QAAS,QAAO,CAAC;AAEtB,MAAI;AACF,UAAM,SAAS,UAAmB,QAAQ,QAAQ,qBAAqB,CAAC;AACxE,QAAI,CAAC,MAAM,QAAQ,MAAM,EAAG,QAAO,CAAC;AAEpC,WAAO,OAAO,OAAO,CAAC,UACpB,CAAC,CAAC,SACF,OAAO,UAAU,YACjB,OAAQ,MAAkC,YAAY,YACtD,OAAQ,MAAkC,mBAAmB,QAC9D;AAAA,EACH,SAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,SAAS,iBAAiB,SAAmC;AAC3D,QAAM,UAAU,WAAW;AAC3B,MAAI,CAAC,QAAS;AAEd,MAAI;AACF,YAAQ,QAAQ,uBAAuB,KAAK,UAAU,OAAO,CAAC;AAAA,EAChE,SAAQ;AAAA,EAER;AACF;AAEA,SAAS,0BAA0B,SAA6B;AAC9D,QAAM,OAAO,oBAAI,IAAoB;AAErC,WAAS,QAAQ,QAAQ,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AAC3D,UAAM,QAAQ,QAAQ,KAAK;AAC3B,QAAI,CAAC,KAAK,IAAI,MAAM,OAAO,GAAG;AAC5B,WAAK,IAAI,MAAM,SAAS,MAAM,cAAc;AAAA,IAC9C;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,iBAAiB,WAA+C,UAAqC;AACnH,MAAI,aAAa,QAAQ,CAAC,SAAU;AAEpC,QAAM,UAA4B;AAAA,IAChC,SAAS,OAAO,SAAS;AAAA,IACzB,gBAAgB,OAAO,QAAQ;AAAA,IAC/B,WAAW,KAAK,IAAI;AAAA,EACtB;AAEA,kBAAgB,wBAAwB,OAAO;AACjD;AAEO,SAAS,eAAe,WAA+C,UAAqC;AACjH,MAAI,aAAa,KAAM;AAEvB,QAAM,UAA4B;AAAA,IAChC,SAAS,OAAO,SAAS;AAAA,IACzB,gBAAgB,OAAO,8BAAY,KAAK;AAAA,IACxC,WAAW,KAAK,IAAI;AAAA,EACtB;AAEA,kBAAgB,gBAAgB,OAAO;AACzC;AAEO,SAAS,oBAAoB,QAIjC;AACD,QAAM,EAAE,OAAO,MAAM,aAAa,IAAI;AACtC,QAAM,kBAAkB,sCAAgB;AACxC,QAAM,oBAAoB,UAAU,eAAe,UAAU;AAE7D,MAAI,CAAC,kBAAmB,QAAO;AAC/B,QAAM,gBAAgB,yBAAyB,IAAI;AAEnD,MAAI,UAAU,aAAa;AACzB,QAAI,CAAC,cAAe,QAAO;AAE3B,UAAM,eAAe,eAAe,sBAAsB;AAC1D,QAAI,CAAC,aAAc,QAAO;AAE1B,QAAI,aAAa,YAAY,iBAAiB,iBAAiB,aAAa,SAAS,GAAG;AACtF,aAAO,aAAa;AAAA,IACtB;AAEA,WAAO;AAAA,EACT;AAGA,MAAI,oBAAoB,SAAS,oBAAoB,KAAM,QAAO;AAClE,MAAI,CAAC,cAAe,QAAO;AAE3B,QAAM,aAAa,eAAe,cAAc;AAChD,MAAI,cAAc,WAAW,YAAY,iBAAiB,iBAAiB,WAAW,SAAS,GAAG;AAChG,WAAO,WAAW;AAAA,EACpB;AAEA,SAAO,oBAAoB,QAAQ,QAAQ;AAC7C;AAEO,SAAS,kBAAkB,WAA+C,UAAqC;AACpH,MAAI,aAAa,KAAM;AAEvB,QAAM,UAAU,gBAAgB;AAChC,UAAQ,KAAK;AAAA,IACX,SAAS,OAAO,SAAS;AAAA,IACzB,gBAAgB,WAAW,OAAO,QAAQ,IAAI;AAAA,EAChD,CAAC;AAED,mBAAiB,OAAO;AAC1B;AAEO,SAAS,gCAAgC;AAC9C,QAAM,UAAU,gBAAgB;AAChC,MAAI,CAAC,QAAQ,OAAQ,QAAO;AAE5B,SAAO,0BAA0B,OAAO;AAC1C;AAEO,SAAS,mCACd,MACA,iBAA6C,MAC7C;AACA,QAAM,SAAS,yBAAyB,IAAI;AAC5C,QAAM,MAAM,0CAAkB,8BAA8B;AAE5D,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,WAAW,2BAAK,IAAI;AAC1B,SAAO;AACT;AAEA,SAAS,kCAAkC,OAA8B,QAAyD;AA1PlI;AA2PE,MAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,EAAG,QAAO;AAExD,MAAI,QAAO,iCAAQ,WAAU,UAAU;AACrC,UAAM,WAAU,WAAM,KAAK,CAAC,UAAS,6BAAM,WAAU,OAAO,KAAK,MAAjD,YAAsD,MAAM,OAAO,KAAK;AACxF,QAAI,WAAW,OAAO,YAAY,SAAU,QAAO;AAAA,EACrD;AAEA,SAAO,MAAM,CAAC;AAChB;AAEO,SAAS,yCAAyC,OAA8B,QAA6B;AArQpH;AAsQE,QAAM,eAAe,kCAAkC,OAAO,MAAM;AACpE,MAAI,CAAC,aAAc;AAEnB,QAAM,YAAY,yBAAyB,YAAY;AACvD,QAAM,YAAW,8DAAc,mBAAd,YAAgC,iCAAQ,iBAAxC,YAAwD,iCAAQ,mBAAhE,YAAkF;AACnG,mBAAiB,WAAW,QAAQ;AACtC;;;ACrPA,eAAsB,mBAAmB,SAAuB;AAvBhE;AAwBE,QAAM,UAAQ,aAAQ,cAAR,mBAAmB,UAAS,CAAC;AAC3C,QAAM,iBAAiB,8BAA8B;AAErD,MAAI,CAAC,MAAM,OAAQ,QAAO,CAAC;AAE3B,SAAO,MAAM,QAAQ;AAAA,IACnB,MAAM,IAAI,OAAO,SAAoB;AA9BzC,UAAAC,KAAA;AA8B6C;AAAA,QACrC,SAAS,KAAK;AAAA,QACd,gBAAgB,iBAAiB,IAAI;AAAA,QACrC,gBAAgB,iBAAiB,IAAI;AAAA,QACrC,oBAAoB,oBAAoB,QAAQ,WAAW,IAAI;AAAA,QAC/D,OAAO,aAAY,6BAAM,SAAQ,KAAK,QAAQ,CAAC,CAAC,KAAK;AAAA,QACrD,UAAU,KAAK,YAAY;AAAA,QAC3B,UAAU,KAAK,SAAS;AAAA,QACxB,YAAY,gBAAeA,MAAA,KAAK,mBAAL,gBAAAA,IAAqB,SAAS,OAAK,UAAK,mBAAL,mBAAqB,cAAa;AAAA,QAChG,UAAW,MAAM,WAAW,IAAI,KAAM;AAAA,QACtC,YAAW,6BAAM,KAAK,QAAQ,6BAAM,SAAS,IAAI,WAAU,KAAK,QAAQ;AAAA,QACxE,eAAe,gBAAgB,IAAI,KAAK;AAAA,QACxC,gBAAc,wCAAM,YAAN,mBAAe,MAAM,OAAO,OAA5B,mBAAgC,WAAU;AAAA,QACxD,iBAAe,wCAAM,YAAN,mBAAe,MAAM,OAAO,OAA5B,mBAAgC,WAAU;AAAA,QACzD,UAAU,6BAA6B,KAAK,SAAS,MAAM;AAAA,QAC3D,UAAU,YAAY,IAAI;AAAA,QAC1B,WAAW,gBAAgB,6BAAM,KAAK,KAAK,gBAAgB,6BAAM,QAAQ,KAAK;AAAA,QAC9E,iBAAgB,wCAAmC,MAAM,cAAc,MAAvD,YAA4D;AAAA,MAC9E;AAAA,KAAE;AAAA,EACN;AACF;;;ACvCA,eAAsB,cAAc,SAA8B,OAAe;AAXjF;AAYE,QAAM,EAAE,MAAM,WAAW,aAAa,IAAI;AAC1C,QAAM,mBAAmB,oBAAoB,EAAE,OAAO,MAAM,aAAa,CAAC;AAC1E,QAAM,iBAAiB,cAAc,IAAI;AAEzC,MAAI,UAAU,eAAe;AAC3B,sBAAkB,gBAAgB,gBAAgB;AAAA,EACpD;AAEA,SAAO;AAAA,IACL;AAAA,MACE,OAAO,QAAO,6BAAM,WAAU,WAAW,KAAK,QAAQ;AAAA,MACtD,UAAU;AAAA,MACV,UAAS,6BAAM,eAAa,6BAAM,mBAAiB,6BAAM,aAAW,6BAAM,OAAM;AAAA,MAChF,gBAAgB,iBAAiB,IAAI;AAAA,MACrC,gBAAgB,iBAAiB,IAAI;AAAA,MACrC,oBAAoB,UAAU,qBAAqB,oBAAoB,WAAW,IAAI,IAAI;AAAA,MAC1F,QAAO,6BAAM,UAAS;AAAA,MACtB,WAAU,6BAAM,SAAO,6BAAM,WAAS,6BAAM,eAAY,kCAAM,uBAAN,mBAA0B,KAAK,CAAC,MAAwB,EAAE,SAAS,SAAS,YAAS,kCAAM,gBAAN,mBAAmB,KAAK,UAAU,IAAG,kCAAM,gBAAN,mBAAmB,KAAK,YAAY,UAAS;AAAA,MAC/N,cAAY,kCAAM,mBAAN,mBAAsB,eAAa,6BAAM,iBAAc,kCAAM,UAAN,mBAAa,WAAQ,wCAAM,gBAAN,mBAAmB,UAAnB,mBAA0B,SAAQ;AAAA,MAC1H,WAAU,6BAAM,UAAO,kCAAM,gBAAN,mBAAmB,QAAQ,MAAM,WAAW,IAAI,KAAM;AAAA,MAC7E,aAAW,kCAAM,SAAN,mBAAY,QAAQ,6BAAM,SAAS,IAAI,aAAU,kCAAM,SAAN,mBAAY,MAAM,OAAO,cAAW,kCAAM,cAAN,mBAAiB,MAAM,OAAO,cAAW,8CAAM,gBAAN,mBAAmB,gBAAnB,mBAAgC,SAAhC,mBAAsC,MAAM,OAAO,YAAW;AAAA,MACvM,eAAe,gBAAgB,IAAI,KAAK;AAAA;AAAA,MAExC,gBAAe,oCAAM,aAAW,6BAAM,kBAAgB,6BAAM,UAAQ,6BAAM,YAAY,OAAM,MAAM,KAAK,EAAE,CAAC,MAA3F,mBAA8F,WAAU;AAAA;AAAA,MAEvH,gBAAe,6BAAM,WAAQ,kCAAM,mBAAN,mBAAsB,WAAS,yCAAM,aAAW,6BAAM,UAAQ,6BAAM,YAAY,UAAjD,mBAAwD,MAAM,OAAO,OAArE,mBAAyE,WAAU;AAAA,MAC/I,UAAU,YAAY,IAAI;AAAA,MAC1B,gBAAgB;AAAA,MAEhB,WAAU,6BAAM,aAAY;AAAA;AAAA,MAC5B,WAAW,gBAAgB,6BAAM,KAAK,KAAK,gBAAgB,6BAAM,QAAQ,KAAK;AAAA,IAChF;AAAA,EACF;AACF;;;AC3CA,eAAsB,cAAc,SAA8B;AAChE,WAAQ,mCAAS,SAAQ,CAAC,GAAG,IAAI,CAAC,SAAc;AAHlD;AAII,WAAO;AAAA,MACL,SAAO,kCAAM,UAAN,mBAAa,UAAQ,6BAAM,YAAS,kCAAM,WAAN,mBAAc,eAAY,wCAAM,eAAN,mBAAkB,cAAlB,mBAA6B,cAAa;AAAA,MAC/G,UAAU;AAAA,MACV,WAAU,6BAAM,SAAO,6BAAM,eAAY,kCAAM,gBAAN,mBAAoB,GAAG,WAAS,6BAAM,sBAAoB,6BAAM,mBAAmB,KAAK,CAAC,MAAwB,EAAE,SAAS,SAAS,UAAS;AAAA,MACvL,OAAO,QAAO,mCAAS,WAAU,WAAW,QAAQ,QAAQ,OAAO,6BAAM,KAAK;AAAA,MAC9E,aAAY,6BAAM,cAAa,KAAK,aAAa,KAAK,YAAY,6BAAM,aAAa,gBAAe,kCAAM,UAAN,mBAAa,IAAI,KAAK,eAAe,QAAQ,KAAK,KAAK,eAAe,6BAAM,UAAU,KAAK;AAAA,MAC/L,aAAW,kCAAM,gBAAN,mBAAmB,MAAM,OAAO,cAAW,kCAAM,kBAAN,mBAAqB,MAAM,OAAO,cAAW,kCAAM,cAAN,mBAAiB,MAAM,OAAO,cAAW,wCAAM,QAAN,mBAAW,UAAX,mBAAkB,MAAM,OAAO,YAAW;AAAA,MACtL,eAAe,gBAAgB,IAAI,KAAK;AAAA,MACxC,gBAAc,wCAAM,SAAN,mBAAY,MAAM,SAAlB,mBAAyB,GAAG,YAAU,6BAAM,mBAAgB,wCAAM,gBAAN,mBAAmB,MAAM,SAAzB,mBAAgC,GAAG,WAAU;AAAA,MACvH,gBAAgB,iBAAiB,IAAI,KAAK;AAAA,MAC1C,UAAS,6BAAM,eAAa,6BAAM,eAAa,6BAAM,aAAW,6BAAM,OAAM;AAAA,MAC5E,UAAU,YAAY,IAAI,KAAK;AAAA,MAC/B,iBAAgB,mCAAS,iBAAgB;AAAA,IAC3C;AAAA,EACF,CAAC;AACH;;;ACVA,eAAsB,aAAa,SAA8B,OAAe;AAThF;AAUE,QAAM,EAAE,MAAM,OAAO,MAAM,IAAI;AAC/B,QAAM,mBAAmB,oBAAoB,EAAE,OAAO,MAAM,cAAc,KAAK,CAAC;AAChF,QAAM,iBAAiB,cAAc,IAAI;AAEzC,MAAI,UAAU,aAAa;AACzB,mBAAe,gBAAgB,gBAAgB;AAAA,EACjD;AAEA,SAAO;AAAA,IACL;AAAA,MACE,OAAO,SAAS;AAAA,MAChB,UAAU;AAAA,MACV,WAAU,6BAAM,UAAO,kCAAM,uBAAN,mBAA0B,KAAK,CAAC,MAAwB,EAAE,SAAS,SAAS,WAAS,6BAAM,qBAAoB;AAAA,MACtI,YAAY,KAAK,YAAY,6BAAM,aAAa,eAAe,6BAAM,MAAM,IAAI,KAAK,eAAe,KAAK,KAAK;AAAA,MAC7G,YAAW,6BAAM,iBAAe,6BAAM,kBAAiB;AAAA,MACvD,eAAe,gBAAgB,IAAI,KAAK;AAAA,MACxC,gBAAc,kCAAM,SAAN,mBAAY,MAAM,KAAK,GAAG,WAAU;AAAA,MAClD,gBAAgB,iBAAiB,IAAI,OAAK,wCAAM,aAAN,mBAAgB,MAAM,KAAK,OAA3B,mBAA+B,WAAU;AAAA,MACnF,UAAS,6BAAM,eAAa,6BAAM,eAAa,6BAAM,kBAAiB;AAAA,MACtE,UAAU,YAAY,IAAI,KAAK;AAAA;AAAA,MAG/B,WAAU,6BAAM,SAAO,6BAAM,cAAa;AAAA,MAC1C,WAAU,6BAAM,SAAO,6BAAM,cAAY,6BAAM,SAAQ;AAAA,MACvD,WAAW,gBAAgB,6BAAM,KAAK,KAAK,gBAAgB,6BAAM,QAAQ,KAAK;AAAA,MAC9E,YAAW,6BAAM,WAAU;AAAA,MAC3B,gBAAgB;AAAA,IAClB;AAAA,EACF;AACF;;;AC9BA,eAAsB,gBAAgB,SAA8B;AATpE;AAUE,QAAM,eAAe,MAAM,mCAAS,SAAS;AAE7C,MAAI,CAAC,aAAc,QAAO,CAAC;AAE3B,QAAM,UAAU,MAAM,kBAAkB,mCAAS,SAAS;AAE1D,QAAM,OAAO,mCAAS,MAAM;AAE5B,SAAO;AAAA,IACL,QAAO,6BAAM,QAAQ,GAAG,gBAAgB,UAAS;AAAA,IACjD,UAAU;AAAA,IACV,UAAU,oBAAoB,mCAAS,SAAS;AAAA,IAChD,YAAY,eAAe,QAAQ,KAAK,KAAK;AAAA,IAC7C,YAAW,mCAAS,iBAAe,mCAAS,mBAAiB,mCAAS,cAAa;AAAA,IACnF,eAAe,gBAAgB,OAAO,KAAK;AAAA,IAC3C,gBAAc,kCAAM,SAAN,mBAAY,MAAM,KAAK,MAAM,WAAU;AAAA,IACrD,gBAAgB,iBAAiB,OAAO,KAAK;AAAA,IAC7C,UAAS,mCAAS,cAAa;AAAA,IAC/B,WAAU,6BAAM,QAAQ,GAAG,gBAAgB,cAAY,6BAAM,QAAQ,GAAG,gBAAgB,UAAS;AAAA,EACnG;AACF;;;AChBO,SAAS,SAAS,SAA8B,WAAmB;AACxE,MAAI,mCAAS,MAAO,QAAO,QAAQ;AAEnC,UAAQ,WAAW;AAAA,IACjB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,mBAAmB,OAAO;AAAA,IACnC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,cAAc,SAAS,SAAS;AAAA,IACzC,KAAK;AACH,aAAO,cAAc,OAAO,EAAE,KAAK,CAAC,UAAU;AAC5C,iDAAyC,OAAO,OAAO;AACvD,eAAO;AAAA,MACT,CAAC;AAAA,IACH,KAAK;AACH,aAAO,cAAc,OAAO;AAAA,IAC9B,KAAK;AAAA,IACL,KAAK;AACH,aAAO,aAAa,SAAS,SAAS;AAAA,IACxC,KAAK;AAAA,IACL,KAAK;AACH,aAAO,gBAAgB,OAAO;AAAA,IAChC;AACE,aAAO;AAAA,EACX;AACF;;;AC9CO,IAAM,cAAc,MAAM;AAC/B,MAAI,OAAO,WAAW,YAAa,QAAO;AAE1C,MAAI;AACF,UAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;AACzD,WAAO,OAAO,IAAI,iBAAiB;AAAA,EACrC,SAAQ;AAEN,WAAO,OAAO,SAAS,OAAO,QAAQ,iBAAiB,MAAM;AAAA,EAC/D;AACF;AAeO,IAAM,iBAAiB;AAAA,EAC5B,CAAC,QAAQ,iBAAc;AAAA,EACvB,CAAC,YAAY,KAAK;AAAA,EAClB,CAAC,cAAc,eAAe;AAAA,EAC9B,CAAC,OAAO,KAAK;AAAA,EACb,CAAC,SAAS,WAAW;AAAA,EACrB,CAAC,UAAU,YAAY;AAAA,EACvB,CAAC,UAAU,QAAQ;AAAA,EACnB,CAAC,UAAU,QAAQ;AAAA,EACnB,CAAC,QAAQ,WAAQ;AAAA,EACjB,CAAC,QAAQ,WAAQ;AAAA,EACjB,CAAC,UAAU,WAAQ;AAAA,EACnB,CAAC,QAAQ,WAAQ;AAAA,EACjB,CAAC,OAAO,WAAQ;AAAA,EAChB,CAAC,SAAS,WAAQ;AAAA,EAClB,CAAC,SAAS,WAAQ;AAAA,EAClB,CAAC,OAAO,WAAQ;AAClB;AAGO,IAAM,QAAQ,CAAC,QAAiB,OAAO,QAAQ,WAAW,OAAO,IAAI,QAAQ,WAAW,EAAE,EAAE,QAAQ,KAAK,GAAG,CAAC,IAAI;AAEjH,IAAM,iBAAiB,OAAOC,cAAyD;AAC5F,MAAI,CAACA,UAAU,QAAO;AAEtB,QAAM,UAAU,IAAI,YAAY;AAChC,QAAM,OAAO,QAAQ,OAAOA,SAAQ;AACpC,QAAM,aAAa,MAAM,OAAO,OAAO,OAAO,WAAW,IAAI;AAC7D,QAAM,YAAY,MAAM,KAAK,IAAI,WAAW,UAAU,CAAC;AAEvD,SAAO,UAAU,IAAI,OAAK,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AACpE;AAEA,IAAM,aAAuC;AAAA,EAC3C,YAAY,CAAC,MAAM,KAAK,KAAK,KAAK,MAAM,MAAM,OAAO,MAAM,OAAO,MAAM,MAAM,IAAI;AAAA,EAClF,UAAU,CAAC,MAAM,QAAQ,QAAQ,QAAQ,SAAS,UAAU,UAAU,KAAK,KAAK,KAAK,IAAI;AAC3F;AAEA,IAAM,iBAAiB,CAAC,UAA6E;AACnG,MAAI,MAAM,MAAM,OAAK,kBAAkB,KAAK,CAAC,CAAC,EAAG,QAAO;AACxD,MAAI,MAAM,KAAK,OAAK,wBAAwB,KAAK,CAAC,CAAC,EAAG,QAAO;AAC7D,MAAI,MAAM,MAAM,OAAK,WAAW,WAAW,SAAS,EAAE,YAAY,CAAC,CAAC,EAAG,QAAO;AAC9E,SAAO;AACT;AAEO,IAAM,YAAY,CAAC,UAA8B;AACtD,QAAM,SAAS,CAAC,GAAG,IAAI,IAAI,MAAM,OAAO,OAAO,CAAC,CAAC;AACjD,QAAM,OAAO,eAAe,MAAM;AAElC,MAAI,SAAS,YAAY;AACvB,WAAO,OAAO,KAAK,CAAC,GAAG,MAAM,WAAW,CAAC,IAAI,WAAW,CAAC,CAAC;AAAA,EAC5D;AAEA,MAAI,SAAS,gBAAgB,SAAS,YAAY;AAChD,UAAM,QAAQ,WAAW,IAAI;AAC7B,WAAO,OAAO,KAAK,CAAC,GAAG,MAAM;AAC3B,YAAM,KAAK,MAAM,QAAQ,EAAE,YAAY,CAAC;AACxC,YAAM,KAAK,MAAM,QAAQ,EAAE,YAAY,CAAC;AACxC,cAAQ,OAAO,KAAK,MAAM,OAAO,OAAO,KAAK,MAAM;AAAA,IACrD,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEO,IAAM,aAAa,CAAC,QAAwB,MAAM,IAAI,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC,EAAE,YAAY,IAAI;;;ACxFtG,SAAS,yBAAyB,SAA8B;AAFvE;AAGE,MAAI,QAAQ,aAAc,QAAO,QAAQ;AACzC,MAAI,CAAC,QAAQ,UAAW,QAAO;AAE/B,QAAM,aAAW,aAAQ,UAAU,gBAAlB,mBAA+B,aAAY,CAAC;AAC7D,QAAM,YAAU,aAAQ,UAAU,gBAAlB,mBAA+B,mBAAkB,CAAC;AAClE,MAAI,CAAC,SAAS,UAAU,CAAC,QAAQ,OAAQ,QAAO;AAEhD,QAAM,kBAAkB,SAAS,KAAK,CAAC,MAAiC,uBAAG,aAAa,KAAK,SAAS,CAAC;AACvG,QAAM,KAAK,QAAO,mDAAiB,kBAAiB,EAAE,EAAE,KAAK;AAC7D,MAAI,CAAC,GAAI,QAAO;AAEhB,QAAM,SAAS,QAAQ,KAAK,CAAC,MAAsB,OAAO,EAAE,EAAE,MAAM,EAAE;AACtE,QAAM,SAAO,sCAAQ,SAAR,mBAAc,kBAAiB;AAC5C,QAAM,QAAQ,eAAe,KAAK,CAAC,CAAC,GAAG,MAAM,KAAK,SAAS,GAAG,CAAC;AAE/D,SAAO,QAAQ,MAAM,CAAC,IAAI;AAC5B;;;ACjBO,SAAS,0BAA0B,SAA8B;AAFxE;AAGE,MAAI,CAAC,QAAQ,UAAW,QAAO;AAE/B,QAAM,iBAAe,aAAQ,UAAU,gBAAlB,mBAA+B,iBAAgB,CAAC;AACrE,MAAI,CAAC,aAAa,OAAQ,QAAO;AAEjC,QAAM,aAAW,kBAAa,CAAC,MAAd,mBAAiB,aAAY,CAAC;AAC/C,MAAI,CAAC,SAAS,OAAQ,QAAO;AAE7B,QAAM,SAAO,oBAAS,CAAC,MAAV,mBAAa,sBAAb,mBAAgC,kBAAiB;AAC9D,QAAM,QAAQ,eAAe,KAAK,CAAC,CAAC,GAAG,MAAM,KAAK,SAAS,GAAG,CAAC;AAE/D,SAAO,QAAQ,MAAM,CAAC,IAAI;AAC5B;;;ACLO,SAAS,eAAe,SAA8B,WAAmB;AAC9E,MAAI,mCAAS,YAAa,QAAO,QAAQ;AAEzC,UAAQ,WAAW;AAAA,IACjB,KAAK;AAAA,IACL,KAAK;AACH,aAAO,yBAAyB,OAAO;AAAA,IACzC,KAAK;AAAA,IACL,KAAK;AACH,aAAO,0BAA0B,OAAO;AAAA,IAC1C;AACE,aAAO;AAAA,EACX;AACF;;;ACpBE,IAAM,eAAuD;AAAA,EAC3D,WAAW;AAAA,IACT,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,aAAa;AAAA,IACX,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AAAA,EACA,kBAAkB;AAAA,IAChB,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AAAA,EACA,kBAAkB;AAAA,IAChB,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,EACX;AACF;AAoBF,eAAsB,YAAY,SAA0B;AAjD5D;AAkDE,QAAM,UAAS,kBAAa,QAAQ,WAAW,SAAS,MAAzC,mBAA6C,QAAQ,YAAY;AAEhF,MAAI,CAAC,OAAQ,QAAO,EAAE,UAAU,EAAE,OAAO,QAAQ,WAAW,IAAI,mCAAS,OAAO,GAAG,SAAS,KAAK;AAEjG,MAAI;AACF,UAAM,MAAM,GAAG,MAAM;AACrB,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,EAAE,OAAO,QAAQ,UAAU,CAAC;AAAA,IACnD,CAAC;AAED,QAAI,SAAS,WAAW,KAAK;AAE3B,WAAI,mCAAS,mBAAgB,aAAQ,iBAAR,mBAAsB,MAAK;AACtD,cAAM,EAAE,KAAK,WAAW,OAAO,WAAW,UAAU,OAAO,YAAY,IAAI,QAAQ;AACnF,cAAMC,YAAW,2BAAK,QAAQ,OAAO;AACrC,cAAMC,kBAAiB,MAAM,eAAeD,SAAQ;AAEpD,eAAO;AAAA,UACL,SAAS;AAAA,UACT,UAAU;AAAA,YACR;AAAA,YACA;AAAA,YACA,UAAAA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,WAAW;AAAA,YACX,KAAKC;AAAA,UACP;AAAA,QACF;AAAA,MACF;AAEA,aAAO,EAAE,UAAU,EAAE,OAAO,QAAQ,WAAW,IAAI,mCAAS,OAAO,GAAG,SAAS,KAAK;AAAA,IACtF;AAEA,UAAM,MAAM,MAAM,SAAS,KAAK;AAChC,UAAMD,aAAW,sCAAK,aAAL,mBAAe,aAAf,mBAAyB,QAAQ,OAAO;AACzD,UAAM,iBAAiB,MAAM,eAAeA,SAAQ;AAEpD,WAAO,EAAE,GAAG,KAAK,UAAU,EAAE,GAAG,IAAI,UAAU,KAAK,gBAAgB,UAAAA,UAAS,EAAE;AAAA,EAChF,SAAS,GAAG;AAEV,SAAI,mCAAS,mBAAgB,aAAQ,iBAAR,mBAAsB,MAAK;AACtD,YAAM,EAAE,KAAK,WAAW,OAAO,WAAW,UAAU,OAAO,YAAY,IAAI,QAAQ;AACnF,YAAMA,YAAW,2BAAK,QAAQ,OAAO;AACrC,YAAM,iBAAiB,MAAM,eAAeA,SAAQ;AAEpD,aAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAU;AAAA,UACR;AAAA,UACA;AAAA,UACA,UAAAA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX,KAAK;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,WAAO,EAAE,UAAU,EAAE,OAAO,QAAQ,WAAW,IAAI,mCAAS,OAAO,GAAG,SAAS,KAAK;AAAA,EACtF;AACF;;;AC7GO,IAAM,gBAAgB;AAAA,EAC3B,OAAO;AAAA,EAEP,OAAO;AAAA,EAEP,cAAc;AAAA,EAEd,WAAW;AAAA;AAAA,EAEX,cAAc,CAAC,SAAuB,cAAyB;AAC7D,QAAI,mCAAS,aAAc,QAAO,QAAQ;AAE1C,WAAO,SACJ,OAAO,MAAM,QAAQ,QAAQ,EAC7B,OAAO,QAAQ,cAAc,MAAM,QAAQ,cAAc,EAAE,EAC3D,OAAO,MAAM,QAAQ,aAAa,KAAK;AAAA,EAC5C;AAAA,EAEA,QAAQ,CAAC,SAAuB,cAAyB;AACvD,WAAO,QAAQ,UAAU;AAAA,EAC3B;AAAA,EAEA,YAAY,CAAC,SAAuB,cAAyB;AAC3D,QAAI,mCAAS,UAAW,QAAO,QAAQ;AAEvC,QAAI,mCAAS,MAAM;AACjB,aAAO,CAAC,QAAQ,KAAK,aAAa,QAAQ,KAAK,aAAa,QAAQ,KAAK,OAAO;AAAA,IAClF;AAEA,QAAI,mCAAS,MAAM;AACjB,aAAO,QAAQ,KAAK,IAAI,CAAC,UAA+D,6BAAM,eAAa,6BAAM,QAAM,6BAAM,UAAS;AAAA,IACxI;AAEA,YAAQ,QAAQ,UAAU,SAAS,CAAC,GACjC,IAAI,CAAC,SAAuB,KAAK,SAAS,EAC1C,KAAK,GAAG;AAAA,EACb;AAAA,EAEA,UAAU,CAAC,SAAuB,cAAyB;AA9C7D;AA+CI,QAAI,mCAAS,SAAU,QAAO,QAAQ;AAEtC,QAAI,mCAAS,UAAW,QAAO;AAE/B,QAAI,mCAAS,MAAM;AACjB,eAAO,mBAAQ,SAAR,mBAAc,WAAd,mBAAsB,kBAAiB;AAAA,IAChD;AAEA,aAAO,mBAAQ,cAAR,mBAAmB,yBAAnB,mBAAyC,iBAAgB;AAAA,EAClE;AAAA,EAEA,OAAO,CAAC,SAAuB,cAAyB;AA1D1D;AA2DI,QAAI,mCAAS,MAAO,QAAO,MAAM,QAAQ,KAAK;AAE9C,WAAO,QAAQ,OAAO,OAAM,aAAQ,SAAR,mBAAc,KAAK,MAAI,aAAQ,cAAR,mBAAmB,UAAS,OAC3E,QAAQ,UAAU,QAAQ,MAC1B;AAAA,EACN;AAAA,EAEA,gBAAgB,CAAC,SAAuB,cAAyB;AAlEnE;AAmEI,QAAI,mCAAS,cAAe,QAAO,QAAQ;AAE3C,UAAM,eAAa,aAAQ,cAAR,mBAAmB,iBAAc,aAAQ,cAAR,mBAAmB,WAAU,CAAC;AAClF,UAAM,QAAQ,QAAQ,UAAU;AAChC,UAAM,gBAAgB,MAAM,OAAO,CAAC,KAAa,SAAwE;AACvH,YAAM,eAAe,KAAK,IAAI,GAAG,KAAK,YAAY,KAAK,YAAY;AACnE,aAAO,MAAO,eAAe,KAAK;AAAA,IACpC,GAAG,CAAC;AAEJ,UAAM,YAAY,WAAW,KAAK,CAAC,MAAsB,EAAE,OAAO,WAAW;AAC7E,WAAO,KAAK,MAAK,uCAAW,UAAS,KAAK,aAAa,IAAI,OAAO;AAAA,EACpE;AAAA,EAEA,UAAU,CAAC,SAAuB,cAAyB;AAhF7D;AAiFI,UAAM,eAAa,aAAQ,cAAR,mBAAmB,iBAAc,aAAQ,cAAR,mBAAmB,WAAU,CAAC;AAElF,UAAM,WACJ,WACG,OAAO,CAAC,MAAoB,EAAE,OAAO,OAAO,EAC5C,OAAO,CAAC,KAAa,MAAoB,OAAO,EAAE,SAAS,IAAI,CAAC,IAAI,OAAO;AAEhF,WAAO;AAAA,EACT;AAAA,EAEA,gBAAgB,CAAC,SAAuB,cAAyB;AA3FnE;AA4FI,QAAI,QAAQ,cAAe,QAAO,QAAQ;AAE1C,UAAM,aAAW,aAAQ,cAAR,mBAAmB,aAAY,CAAC;AAEjD,QAAI,SAAS,WAAW,EAAG,QAAO;AAElC,UAAM,iBAAiB,SAAS;AAAA,MAAO,CAAC,QACtC,IAAI,KAAK,YAAY,EAAE,SAAS,OAAO;AAAA,IACzC;AAEA,QAAI,eAAe,WAAW,EAAG,QAAO;AAExC,WAAO,eAAe,IAAI,CAAC,QAAsB,IAAI,IAAI,EAAE,KAAK,KAAK;AAAA,EACvE;AAAA,EAEA,iBAAiB,CAAC,SAAuB,cAAyB;AAChE,WAAO,QAAQ,yBAAwB,mCAAS,UAAU,cAAc,iBAAgB;AAAA,EAC1F;AAAA,EAEA,QAAQ,CAAC,SAAuB,cAAyB;AA/G3D;AAgHI,WAAO,QAAQ,mBAAiB,8CAAS,cAAT,mBAAoB,kBAApB,mBAAmC,WAAU;AAAA,EAC/E;AAAA,EAEA,YAAY,CAAC,SAAuB,cAAyB;AAC3D,WAAO,CAAC,CAAC,QAAQ;AAAA,EACnB;AAAA,EAEA,aAAa,CAAC,SAAuB,cAAyB;AAC5D,WAAO,QAAQ,cAAc;AAAA,EAC/B;AAAA,EAEA,cAAc,CAAC,SAAuB,cAAyB;AAC7D,WAAO,CAAC,CAAC,QAAQ;AAAA,EACnB;AAAA,EAEA,iBAAiB,CAAC,SAAuB,cAAyB;AAChE,WAAO,QAAQ,kBAAkB;AAAA,EACnC;AAAA,EAEA,gBAAgB,CAAC,SAAuB,cAAyB;AAC/D,WAAO,QAAQ,iBAAiB;AAAA,EAClC;AAAA,EAEA,eAAe,CAAC,SAAuB,cAAyB;AAC9D,WAAO,QAAQ,gBAAgB;AAAA,EACjC;AAAA,EAEA,eAAe,CAAC,SAAuB,cAAyB;AAC9D,WAAO,QAAQ,gBAAgB;AAAA,EACjC;AAAA,EAEA,SAAS,CAAC,SAAuB,cAAyB;AACxD,WAAO,QAAQ,WAAW;AAAA,EAC5B;AAAA,EAEA,MAAM,CAAC,SAAuB,cAAyB;AACrD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,UAAU,CAAC,SAAuB,cAAyB;AACzD,WAAO,QAAQ,WAAW;AAAA,EAC5B;AAAA,EAEA,aAAa,CAAC,SAAuB,cAAyB;AA3JhE;AA4JI,UAAM,YAAY,QAAQ;AAC1B,QAAI,CAAC,UAAW,QAAO;AAEvB,UAAM,kBAAgB,eAAU,iBAAV,mBAAwB,kBAAiB,CAAC;AAChE,UAAM,YAAY,cAAc;AAAA,MAAK,CAAC,SAAoB;AAhK9D,YAAAE;AAiKM,gBAAAA,MAAA,KAAK,SAAL,gBAAAA,IAAW,KAAK,CAAC,QAAQ,IAAI,oBAAoB;AAAA;AAAA,IACnD;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,CAAC,SAAuB,cAAyB;AAC1D,UAAM,YAAY,QAAQ;AAC1B,QAAI,CAAC,UAAW,QAAO;AAEvB,UAAM,gBAAqC,CAAC;AAE5C,eAAW,QAAQ,UAAU,aAAa,eAAe;AACvD,YAAM,OAAO,UAAU,MAAM,KAAK,SAAS;AAC3C,UAAI,CAAC,KAAM;AAEX,iBAAW,OAAO,KAAK,MAAM;AAC3B,cAAM,MAAM,IAAI;AAEhB,YAAI,CAAC,cAAc,GAAG,GAAG;AACvB,wBAAc,GAAG,IAAI;AAAA,YACnB,eAAe,IAAI;AAAA,YACnB,eAAe,SAAS,IAAI,gBAAgB;AAAA,YAC5C,UAAU,YAAY,IAAI,QAAQ,KAAK,QAAQ,CAAC,CAAC;AAAA,YACjD,YAAY,CAAC;AAAA,UACf;AAAA,QACF;AAEA,sBAAc,GAAG,EAAE,WAAW,KAAK,KAAK,EAAE;AAAA,MAC5C;AAAA,IACF;AAEA,UAAM,YAAY,OAAO,OAAO,aAAa,EAAE,IAAI,CAAC,OAAO;AAAA,MACzD,UAAU,EAAE;AAAA,MACZ,eAAe,EAAE;AAAA,MACjB,eAAe,EAAE;AAAA,MACjB,YAAY,EAAE,WAAW,KAAK,GAAG;AAAA,IACnC,EAAE;AAEF,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,UAAU,CAAC,SAAuB,cAAyB;AA3M7D;AA4MI,UAAM,aAAY,oDAAS,cAAT,mBAAoB,iBAApB,mBAAkC,kBAAlC,YAAmD,CAAC;AACtE,WAAO,UAAU,OAAO,CAAC,OAAe,SAAc;AA7M1D,UAAAA,KAAAC;AA8MM,YAAM,YAAWD,MAAA,KAAK,SAAL,gBAAAA,IAAW,KAAK,CAAC,QAAa,IAAI,OAAO,KAAK;AAC/D,aAAO,UAASC,MAAA,qCAAU,UAAV,OAAAA,MAAmB;AAAA,IACrC,GAAG,CAAC;AAAA,EACN;AAAA,EAEA,eAAe,CAAC,SAAuB,cAAyB;AAnNlE;AAoNI,UAAM,aAAY,oDAAS,cAAT,mBAAoB,iBAApB,mBAAkC,kBAAlC,YAAmD,CAAC;AACtE,UAAM,eAAe,UAClB,IAAI,CAAC,SAQA;AA9NZ,UAAAD;AA+NQ,UAAI,CAAC,KAAK,YAAa,QAAO;AAC9B,eAAOA,MAAA,KAAK,SAAL,gBAAAA,IAAW,KAAK,CAAC,QAAQ,IAAI,OAAO,KAAK,iBAAgB;AAAA,IAClE,CAAC,EACA,OAAO,OAAO;AAMjB,QAAI,aAAa,WAAW,EAAG,QAAO;AAEtC,UAAM,cAAc,MAAM;AAAA,MACxB,IAAI;AAAA,QACF,aAAa,IAAI,CAAC,QAAQ;AA5OlC,cAAAA;AA6OU,gBAAM,MAAM,IAAI,oBAAoB,oBAChC,YAAUA,MAAA,IAAI,oBAAJ,gBAAAA,IAAqB,iBAAgB,IAAI,QAAQ,EAAE,KAC7D,YAAY,IAAI,QAAQ,EAAE;AAC9B,iBAAO,CAAC,KAAK,GAAG;AAAA,QAClB,CAAC;AAAA,MACH,EAAE,OAAO;AAAA,IACX;AAEA,UAAM,cAAc,YAAY,KAAK,CAAC,GAAG,MAAM;AArPnD,UAAAA,KAAAC;AAsPM,YAAM,SAAS,EAAE,oBAAoB,oBAAoB,IAAI;AAC7D,YAAM,SAAS,EAAE,oBAAoB,oBAAoB,IAAI;AAC7D,UAAI,WAAW,OAAQ,QAAO,SAAS;AAEvC,YAAM,SAAS,EAAE,oBAAoB,sBAChCD,MAAA,EAAE,oBAAF,gBAAAA,IAAmB,iBAAgB,EAAE,QAAQ,KAC7C,EAAE,QAAQ;AACf,YAAM,SAAS,EAAE,oBAAoB,sBAChCC,MAAA,EAAE,oBAAF,gBAAAA,IAAmB,iBAAgB,EAAE,QAAQ,KAC7C,EAAE,QAAQ;AAEf,aAAO,OAAO,cAAc,QAAQ,OAAO;AAAA,IAC7C,CAAC;AAED,UAAM,eAAe,YAClB,IAAI,CAAC,QAAK;AArQjB,UAAAD;AAsQQ,iBAAI,oBAAoB,oBACpB,qBAAmBA,MAAA,IAAI,oBAAJ,gBAAAA,IAAqB,gBAAe,KAAK,IAAI,gBAAgB,YAAY,KAAK,EAAE,KACnG,IAAI,oBAAoB,aACtB,iBAAiB,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,EAAE,KAChD;AAAA,KACP,EACA,OAAO,OAAO,EACd,KAAK,IAAI;AAEZ,WAAO,gBAAgB;AAAA,EACzB;AAAA,EAEA,gBAAgB,CAAC,SAAuB,cAAyB;AAlRnE;AAmRI,aAAO,mBAAQ,cAAR,mBAAmB,eAAnB,mBAA+B,eAAc;AAAA,EACtD;AAAA,EAEA,gBAAgB,CAAC,SAAuB,cAAyB;AAC/D,WAAO,QAAQ,iBAAiB;AAAA,EAClC;AAAA,EAEA,QAAQ,CAAC,SAAuB,cAAyB;AACvD,WAAO,QAAQ,UAAU;AAAA,EAC3B;AAAA,EAEA,MAAM,CAAC,SAAuB,cAAyB;AACrD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;;;ACjRO,IAAM,eAAe;AAAA,EAC1B,WAAW;AAAA,EAEX,OAAO,CAAC,YAA8B;AACpC,WAAO,QAAQ,KAAK,SAAS;AAAA,EAC/B;AAAA,EAEA,cAAc,CAAC,YAAoC;AACjD,WAAO,QAAQ,KAAK,gBAAgB;AAAA,EACtC;AAAA,EAEA,QAAQ,CAAC,YAA+B;AACtC,WAAO,QAAQ,KAAK,UAAU;AAAA,EAChC;AAAA,EAEA,YAAY,CAAC,YAAmC;AAC9C,WAAO,CAAC,CAAC,QAAQ;AAAA,EACnB;AAAA,EAEA,UAAU,CAAC,YAAyC;AAClD,QAAI,mCAAS,SAAU,QAAO,QAAQ;AACtC,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,CAAC,YAAmD;AAxCrE;AAyCI,YAAO,aAAQ,KAAK,kBAAb,YAA8B;AAAA,EACvC;AAAA,EAEA,aAAa,CAAC,YAAmC;AAC/C,WAAO,QAAQ,KAAK,eAAe;AAAA,EACrC;AAAA,EAEA,cAAc,CAAC,YAAoD;AACjE,WAAO,QAAQ,KAAK,gBAAgB;AAAA,EACtC;AAAA,EAEA,iBAAiB,CAAC,YAAsD;AACtE,WAAO,QAAQ,KAAK,mBAAmB;AAAA,EACzC;AAAA,EAEA,gBAAgB,CAAC,YAAsC;AACrD,WAAO,QAAQ,KAAK,kBAAkB;AAAA,EACxC;AAAA,EAEA,eAAe,CAAC,YAAqC;AACnD,WAAO,QAAQ,KAAK,iBAAiB;AAAA,EACvC;AAAA,EAEA,eAAe,CAAC,YAAqC;AACnD,WAAO,QAAQ,KAAK,iBAAiB;AAAA,EACvC;AAAA,EAEA,MAAM,CAAC,YAA0B;AAC/B,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,UAAU,CAAC,YAA0B;AACnC,WAAO,QAAQ,WAAW;AAAA,EAC5B;AAAA,EAEA,QAAQ,CAAC,YAA0B;AACjC,WAAO,QAAQ,UAAU;AAAA,EAC3B;AAAA,EAEA,MAAM,CAAC,YAA0B;AAC/B,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,OAAO,CAAC,YAA0B;AAChC,WAAO,QAAQ,KAAK,SAAS;AAAA,EAC/B;AAAA,EAEA,aAAa,CAAC,YAA0B;AACtC,WAAO,QAAQ,KAAK,eAAe;AAAA,EACrC;AAAA,EAEA,UAAU,CAAC,YAA0B;AACnC,WAAO,QAAQ,KAAK,YAAY;AAAA,EAClC;AAAA,EAEA,UAAU,CAAC,YAA0B;AACnC,WAAO,QAAQ,KAAK,YAAY;AAAA,EAClC;AACF;;;AChGO,IAAME,mBAAkB,CAAC,SAAgC;AAHhE;AAIE,QAAM,QAAQ,6BAAM;AACpB,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,OAAO,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,GAAG,IAAI,OAAO,KAAK;AAClE,QAAM,SAAQ,UAAK,MAAM,oBAAoB,MAA/B,mBAAmC,GAAG;AACpD,SAAQ,wBAA0B;AACpC;AAEO,IAAMC,oBAAmB,CAAC,SAA0B;AAZ3D;AAaE,QAAM,mBAAmB;AACzB,QAAM,cAAa,gBAAK,aAAL,mBAAe,MAAM,SAArB,YAA6B,CAAC;AACjD,QAAM,QAAO,gBAAW,WAAW,SAAS,CAAC,MAAhC,YAAqC;AAClD,QAAM,iBAAiB,KACpB,MAAM,GAAG,EACT,OAAO,CAAC,MAAc,KAAK,CAAC,iBAAiB,KAAK,CAAC,CAAC;AACvD,QAAM,WAAU,oBAAe,eAAe,SAAS,CAAC,MAAxC,YAA6C;AAC7D,SAAO,WAAW,OAAO;AAC3B;AAGO,IAAMC,mBAAkB,CAAC,KAAyB,QAAQ,KAAK,SAAS,QAAQ;AACrF,SAAO,2BAAK;AAAA,IACV;AAAA,IACA,MAAM,KAAK,IAAI,MAAM;AAAA;AAEzB;AAGO,SAASC,uBAAsB;AAYpC,SAAO;AACT;;;AC7BA,IAAM,kBAAkB;AACxB,IAAM,oBAAoB;AAEnB,IAAM,cAAc;AAAA,EACzB,GAAG;AAAA;AAAA,EAEH,OAAO,CAAC,YAAsD;AAC5D,QAAI,mCAAS,MAAO,QAAO,QAAQ;AAEnC,QAAI,mCAAS,UAAU;AACrB,aAAO,QAAQ,SAAS,IAAI,CAAC,SAAkB;AA1BrD;AA2BQ,cAAM,cAAc;AACpB,cAAM,aAAY,8CAAM,WAAN,mBAAc,WAAd,mBAAuB,GAAG,mBAAmB;AAAA,UAAK,CAAC,MACnE,EAAE,cAAc;AAAA,cADA,mBAEf;AAEH,eAAO;AAAA,UACL,UAAU;AAAA,UACV,QAAO,kCAAM,UAAN,YAAe;AAAA,UACtB,aAAY,sBAAK,UAAL,mBAAY,SAAZ,mBAAkB,kBAAlB,YAAmC;AAAA,UAC/C,YAAW,UAAK,kBAAL,YAAsB;AAAA,UACjC,QAAO,gBAAK,WAAL,mBAAa,aAAb,YAAyB;AAAA,UAChC,UAAU,OAAO,SAAS,IAAI,QAAO,kCAAM,WAAN,mBAAc,QAAQ;AAAA,UAC3D,gBAAc,wCAAM,SAAN,mBAAY,MAAM,OAAO,OAAzB,mBAA6B,QAAQ,aAAa,IAAI,QAAQ,MAAM,SAAQ;AAAA;AAAA,UAC1F,gBAAe,wCAAM,SAAN,mBAAY,MAAM,OAAO,OAAzB,YAA+B;AAAA;AAAA,UAC9C,oBAAoBC,qBAAoB;AAAA,UACxC,WAAU,sBAAK,uBAAL,mBAAyB,MAAM,CAAC,MAAqB,EAAE,SAAS,cAAhE,mBAA2E,UAA3E,YAAoF;AAAA,UAC9F,gBAAe,KAAAC,iBAAgB,IAAI,MAApB,YAAyB;AAAA,UACxC,iBAAgB,KAAAC,kBAAiB,IAAI,MAArB,YAA0B;AAAA,UAC1C,UAAS,kCAAM,yBAAN,YAA8B;AAAA,UACvC,WAAU,UAAK,QAAL,YAAY;AAAA,UACtB,WAAU,UAAK,QAAL,YAAY;AAAA,UACtB,YAAW,KAAAC,kBAAgB,kCAAM,UAAN,mBAAc,GAAG,GAAG,MAApC,YAAyC;AAAA,UACpD,YAAW,4BAAK,WAAL,mBAAa,WAAb,mBAAsB,OAAtB,mBAA0B,WAA1B,YAAoC;AAAA,UAC/C,iBAAgB,kCAAM,mBAAN,YAAwB;AAAA,QAC1C;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,YAAY,CAAC,YAAmD;AAC9D,QAAI,mCAAS,WAAY,QAAO,QAAQ;AAExC,QAAI,mCAAS,UAAU;AACrB,aAAO,QAAQ,SACZ,IAAI,CAAC,SAAkB,6BAAM,oBAAoB,EACjD,OAAO,CAAC,OAAqB,QAAQ,EAAE,CAAC;AAAA,IAC7C;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,CAAC,YAA6C;AACnD,QAAI,mCAAS,MAAO,QAAO,QAAQ;AAEnC,QAAI,mCAAS,UAAU;AACrB,aAAO,QAAQ,SACZ,IAAI,CAAC,SAAe;AAnF7B;AAmFgC,0BAAK,WAAL,mBAAa;AAAA,OAAQ,EAC5C,OAAO,CAAC,UAA2B,UAAU,MAAS,EACtD,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC;AAAA,IAC1C;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,gBAAgB,CAAC,YAAqD;AACpE,QAAI,mCAAS,eAAgB,QAAO,QAAQ;AAE5C,QAAI,mCAAS,UAAU;AACrB,YAAM,QAAQ,QAAQ,SACnB;AAAA,QAAQ,CAAC,YAAkB;AAhGpC;AAiGU,2CAAQ,gBAAR,mBAAqB,eAArB,mBAAiC;AAAA,YAAO,CAAC,YAAS;AAjG5D,kBAAAC,KAAAC;AAkGY,sBAAAA,OAAAD,MAAA,QAAQ,WAAR,gBAAAA,IAAgB,WAAhB,gBAAAC,IAAwB,KAAK,CAAC,MAAM,EAAE,iBAAiB;AAAA;AAAA,YAEtD,IAAI,CAAC,YAAS;AApG3B,gBAAAD;AAoG8B,oBAAAA,MAAA,QAAQ,SAAR,gBAAAA,IAAc,MAAM,OAAO;AAAA,aAC5C,OAAO,CAAC,SAAyB,QAAQ,IAAI,OAJhD,YAIsD,CAAC;AAAA;AAAA,MACzD;AACF,YAAM,SAAS,UAAU,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK;AAE/C,aAAO,UAAU;AAAA,IACnB;AAEA,WAAO;AAAA,EACT;AACF;;;AC3GO,IAAM,oBAAoB;AAAA;AAAA,EAE/B,cAAc;AAAA,EAEd,gBAAgB,CAAC,YAA0B;AAP7C;AAQI,QAAI,mCAAS,cAAe,QAAO,QAAQ;AAE3C,UAAM,eAAa,aAAQ,cAAR,mBAAmB,iBAAc,aAAQ,cAAR,mBAAmB,WAAU,CAAC;AAClF,UAAM,QAAQ,QAAQ,UAAU;AAChC,UAAM,gBAAgB,MAAM,OAAO,CAAC,KAAa,SAAwE;AACvH,YAAM,eAAe,KAAK,IAAI,GAAG,KAAK,YAAY,KAAK,YAAY;AACnE,aAAO,MAAO,eAAe,KAAK;AAAA,IACpC,GAAG,CAAC;AAEJ,UAAM,YAAY,WAAW,KAAK,CAAC,MAAsB,EAAE,OAAO,WAAW;AAC7E,WAAO,KAAK,MAAK,uCAAW,UAAS,KAAK,aAAa,IAAI,OAAO;AAAA,EACpE;AAAA,EAEA,UAAU,CAAC,YAA0B;AArBvC;AAsBI,UAAM,eAAa,aAAQ,cAAR,mBAAmB,iBAAc,aAAQ,cAAR,mBAAmB,WAAU,CAAC;AAElF,UAAM,WACJ,WACG,OAAO,CAAC,MAAoB,EAAE,OAAO,OAAO,EAC5C,OAAO,CAAC,KAAa,MAAoB,OAAO,EAAE,SAAS,IAAI,CAAC,IAAI,OAAO;AAEhF,WAAO;AAAA,EACT;AAAA,EAEA,gBAAgB,CAAC,YAA0B;AAhC7C;AAiCI,QAAI,QAAQ,cAAe,QAAO,QAAQ;AAE1C,UAAM,aAAW,aAAQ,cAAR,mBAAmB,aAAY,CAAC;AAEjD,QAAI,SAAS,WAAW,EAAG,QAAO;AAElC,UAAM,iBAAiB,SAAS;AAAA,MAAO,CAAC,QACtC,IAAI,KAAK,YAAY,EAAE,SAAS,OAAO;AAAA,IACzC;AAEA,QAAI,eAAe,WAAW,EAAG,QAAO;AAExC,WAAO,eAAe,IAAI,CAAC,QAAsB,IAAI,IAAI,EAAE,KAAK,KAAK;AAAA,EACvE;AAAA,EAEA,aAAa,CAAC,YAA0B;AAhD1C;AAiDI,UAAM,YAAY,QAAQ;AAC1B,QAAI,CAAC,UAAW,QAAO;AAEvB,UAAM,kBAAgB,eAAU,iBAAV,mBAAwB,kBAAiB,CAAC;AAChE,UAAM,YAAY,cAAc;AAAA,MAAK,CAAC,SAAoB;AArD9D,YAAAE;AAsDM,gBAAAA,MAAA,KAAK,SAAL,gBAAAA,IAAW,KAAK,CAAC,QAAQ,IAAI,oBAAoB;AAAA;AAAA,IACnD;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,CAAC,YAA0B;AACpC,UAAM,YAAY,QAAQ;AAC1B,QAAI,CAAC,UAAW,QAAO;AAEvB,UAAM,gBAAqC,CAAC;AAE5C,eAAW,QAAQ,UAAU,aAAa,eAAe;AACvD,YAAM,OAAO,UAAU,MAAM,KAAK,SAAS;AAC3C,UAAI,CAAC,KAAM;AAEX,iBAAW,OAAO,KAAK,MAAM;AAC3B,cAAM,MAAM,IAAI;AAEhB,YAAI,CAAC,cAAc,GAAG,GAAG;AACvB,wBAAc,GAAG,IAAI;AAAA,YACnB,eAAe,IAAI;AAAA,YACnB,eAAe,SAAS,IAAI,gBAAgB;AAAA,YAC5C,UAAU,YAAY,IAAI,QAAQ,KAAK,QAAQ,CAAC,CAAC;AAAA,YACjD,YAAY,CAAC;AAAA,UACf;AAAA,QACF;AAEA,sBAAc,GAAG,EAAE,WAAW,KAAK,KAAK,EAAE;AAAA,MAC5C;AAAA,IACF;AAEA,UAAM,YAAY,OAAO,OAAO,aAAa,EAAE,IAAI,CAAC,OAAO;AAAA,MACzD,UAAU,EAAE;AAAA,MACZ,eAAe,EAAE;AAAA,MACjB,eAAe,EAAE;AAAA,MACjB,YAAY,EAAE,WAAW,KAAK,GAAG;AAAA,IACnC,EAAE;AAEF,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,UAAU,CAAC,YAA0B;AAhGvC;AAiGI,UAAM,aAAY,oDAAS,cAAT,mBAAoB,iBAApB,mBAAkC,kBAAlC,YAAmD,CAAC;AACtE,WAAO,UAAU,OAAO,CAAC,OAAe,SAAc;AAlG1D,UAAAA,KAAAC;AAmGM,YAAM,YAAWD,MAAA,KAAK,SAAL,gBAAAA,IAAW,KAAK,CAAC,QAAa,IAAI,OAAO,KAAK;AAC/D,aAAO,UAASC,MAAA,qCAAU,UAAV,OAAAA,MAAmB;AAAA,IACrC,GAAG,CAAC;AAAA,EACN;AAAA,EAEA,eAAe,CAAC,YAA0B;AAxG5C;AAyGI,UAAM,aAAY,oDAAS,cAAT,mBAAoB,iBAApB,mBAAkC,kBAAlC,YAAmD,CAAC;AACtE,UAAM,eAAe,UAClB,IAAI,CAAC,SAQA;AAnHZ,UAAAD;AAoHQ,UAAI,CAAC,KAAK,YAAa,QAAO;AAC9B,eAAOA,MAAA,KAAK,SAAL,gBAAAA,IAAW,KAAK,CAAC,QAAQ,IAAI,OAAO,KAAK,iBAAgB;AAAA,IAClE,CAAC,EACA,OAAO,OAAO;AAMjB,QAAI,aAAa,WAAW,EAAG,QAAO;AAEtC,UAAM,cAAc,MAAM;AAAA,MACxB,IAAI;AAAA,QACF,aAAa,IAAI,CAAC,QAAQ;AAjIlC,cAAAA;AAkIU,gBAAM,MAAM,IAAI,oBAAoB,oBAChC,YAAUA,MAAA,IAAI,oBAAJ,gBAAAA,IAAqB,iBAAgB,IAAI,QAAQ,EAAE,KAC7D,YAAY,IAAI,QAAQ,EAAE;AAC9B,iBAAO,CAAC,KAAK,GAAG;AAAA,QAClB,CAAC;AAAA,MACH,EAAE,OAAO;AAAA,IACX;AAEA,UAAM,cAAc,YAAY,KAAK,CAAC,GAAG,MAAM;AA1InD,UAAAA,KAAAC;AA2IM,YAAM,SAAS,EAAE,oBAAoB,oBAAoB,IAAI;AAC7D,YAAM,SAAS,EAAE,oBAAoB,oBAAoB,IAAI;AAC7D,UAAI,WAAW,OAAQ,QAAO,SAAS;AAEvC,YAAM,SAAS,EAAE,oBAAoB,sBAChCD,MAAA,EAAE,oBAAF,gBAAAA,IAAmB,iBAAgB,EAAE,QAAQ,KAC7C,EAAE,QAAQ;AACf,YAAM,SAAS,EAAE,oBAAoB,sBAChCC,MAAA,EAAE,oBAAF,gBAAAA,IAAmB,iBAAgB,EAAE,QAAQ,KAC7C,EAAE,QAAQ;AAEf,aAAO,OAAO,cAAc,QAAQ,OAAO;AAAA,IAC7C,CAAC;AAED,UAAM,eAAe,YAClB,IAAI,CAAC,QAAK;AA1JjB,UAAAD;AA2JQ,iBAAI,oBAAoB,oBACpB,qBAAmBA,MAAA,IAAI,oBAAJ,gBAAAA,IAAqB,gBAAe,KAAK,IAAI,gBAAgB,YAAY,KAAK,EAAE,KACnG,IAAI,oBAAoB,aACtB,iBAAiB,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,EAAE,KAChD;AAAA,KACP,EACA,OAAO,OAAO,EACd,KAAK,IAAI;AAEZ,WAAO,gBAAgB;AAAA,EACzB;AAAA,EAEA,gBAAgB,CAAC,YAA0B;AAvK7C;AAwKI,aAAO,mBAAQ,cAAR,mBAAmB,eAAnB,mBAA+B,eAAc;AAAA,EACtD;AAAA,EAEA,QAAQ,CAAC,YAA0B;AA3KrC;AA4KI,WAAO,QAAQ,mBAAiB,8CAAS,cAAT,mBAAoB,kBAApB,mBAAmC,WAAU;AAAA,EAC/E;AAAA,EAEA,iBAAiB,CAAC,YAA0B;AAC1C,WAAO,QAAQ,yBAAwB,mCAAS,UAAU,cAAc,iBAAgB;AAAA,EAC1F;AACF;;;AC/KO,IAAME,mBAAkB,CAAC,SAAkB;AAChD,QAAM,WAAW,CAAC,UAAU,SAAS,MAAM;AAC3C,QAAM,QAAQ,IAAI,OAAO,SAAS,KAAK,GAAG,GAAG,GAAG;AAEhD,QAAM,QAAQ,6BAAM;AAEpB,MAAI,OAAO;AACT,UAAM,aAAa,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,GAAG,IAAI,OAAO,KAAK;AACxE,UAAM,QAAQ,WAAW,MAAM,KAAK;AAEpC,QAAI,OAAO;AACT,aAAO,MAAM,CAAC,EAAE,YAAY;AAAA,IAC9B;AAAA,EACF;AACA,SAAO;AACT;AAEO,IAAMC,oBAAmB,CAAC,SAA0B;AApB3D;AAqBE,QAAM,YAAY;AAClB,QAAM,gBAAe,gBAAK,eAAL,mBAAkB,KAAK,WAAW,SAAS,OAA3C,YAAiD;AACtE,QAAM,oBAAoB,aAAa,MAAM,GAAG,EAAE,OAAO,OAAO;AAChE,QAAM,mBAAkB,MAAC,GAAG,iBAAiB,EAAE,QAAQ,EAAE,KAAK,OAAK,CAAC,UAAU,KAAK,CAAC,CAAC,MAA7D,YAAkE;AAC1F,SAAO,mBAAmB,gBAAgB,CAAC,EAAE,YAAY,IAAI,gBAAgB,MAAM,CAAC,EAAE,YAAY;AACpG;AAEO,SAASC,iBAAgB,KAAa,QAAQ,KAAK,SAAS,KAAK;AACtE,SAAO,2BAAK;AAAA,IACV;AAAA,IACA,MAAM,KAAK,IAAI,MAAM;AAAA;AAEzB;;;ACbO,IAAM,kBAAkB;AAAA,EAC7B,OAAO,CAAC,YAA6D;AACnE,QAAI,mCAAS,MAAO,QAAO,QAAQ;AAEnC,QAAI,mCAAS,UAAU;AACrB,aAAO,QAAQ,SAAS,IAAI,CAAC,SAAS;AAzB5C;AA0BQ,cAAM,aAAY,kCAAM,MAAM,GAAG,YAAf,mBAAyB,GAAG,gBAAgB;AAC9D,cAAM,SAAQ,kCAAM,MAAM,GAAG,YAAf,mBAAyB,GAAG,gBAAgB;AAE1D,eAAO;AAAA,UACL,UAAU;AAAA,UACV,QAAO,kCAAM,UAAN,YAAe;AAAA,UACtB,aAAY,UAAK,UAAL,YAAc;AAAA,UAC1B,YAAW,UAAK,gBAAL,YAAoB;AAAA,UAC/B,OAAO,wBAAS;AAAA,UAChB,UAAU,OAAO,SAAS,IAAI,OAAO,KAAK;AAAA,UAC1C,eAAc,sBAAK,MAAM,CAAC,MAAZ,mBAAe,SAAf,mBAAqB,MAAM,OAAO,OAAlC,YAAwC;AAAA,UACtD,gBAAe,sBAAK,MAAM,CAAC,MAAZ,mBAAe,SAAf,mBAAqB,MAAM,OAAO,OAAlC,YAAwC;AAAA,UACvD,WAAU,UAAK,qBAAL,YAAyB;AAAA;AAAA,UACnC,eAAeC,iBAAgB,IAAI;AAAA,UACnC,iBAAgB,KAAAC,kBAAiB,IAAI,MAArB,YAA0B;AAAA,UAC1C,UAAS,kCAAM,cAAN,YAAmB;AAAA,UAC5B,WAAU,gBAAK,UAAL,mBAAa,GAAG,WAAhB,YAA0B;AAAA,UACpC,WAAU,UAAK,SAAL,YAAa;AAAA;AAAA,UACvB,YAAW,KAAAC,kBAAgB,wCAAM,UAAN,mBAAc,GAAG,WAAjB,mBAA0B,GAAG,QAAQ,MAArD,YAA0D;AAAA,UACrE,YAAW,4BAAK,UAAL,mBAAa,OAAb,mBAAiB,YAAjB,mBAA2B,GAAG,aAA9B,YAA0C;AAAA,UACrD,iBAAgB,UAAK,mBAAL,YAAuB;AAAA,QACzC;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,CAAC,YAAoD;AAC1D,QAAI,mCAAS,MAAO,QAAO,QAAQ;AAEnC,QAAI,mCAAS,UAAU;AACrB,aAAO,QAAQ,SACZ,IAAI,CAAC,SAAM;AA3DpB;AA2DuB,kDAAM,MAAM,GAAG,YAAf,mBAAyB,GAAG,gBAAgB;AAAA,OAAK,EAC/D,OAAO,CAAC,UAA2B,UAAU,MAAS,EACtD,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC;AAAA,IAC1C;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,CAAC,YAA0D;AACrE,QAAI,mCAAS,WAAY,QAAO,QAAQ;AAExC,QAAI,mCAAS,UAAU;AACrB,aAAO,QAAQ,SACZ,IAAI,CAAC,SAAS,KAAK,SAAS,EAC5B,OAAO,CAAC,OAAqB,QAAQ,EAAE,CAAC;AAAA,IAC7C;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,CAAC,YAAoD;AAC1D,QAAI,mCAAS,MAAO,QAAO,QAAQ;AAEnC,QAAI,mCAAS,UAAU;AACrB,aAAO,QAAQ,SAAS,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;AAAA,IAC1D;AAEA,WAAO;AAAA,EACT;AACF;;;ACnEO,IAAM,kBAAkB;AAAA,EAC7B,OAAO,CAAC,YAA6D;AACnE,QAAI,mCAAS,MAAO,QAAO,QAAQ;AAEnC,QAAI,mCAAS,UAAU;AACrB,aAAO,QAAQ,SAAS,IAAI,CAAC,SAAS;AA1B5C;AA2BQ,cAAM,YAAY,KAAK,OAAO;AAC9B,cAAM,QAAQ,KAAK,OAAO;AAE1B,eAAO;AAAA,UACL,UAAU;AAAA,UACV,QAAO,kCAAM,UAAN,YAAe;AAAA,UACtB,aAAY,UAAK,MAAM,SAAX,YAAmB;AAAA,UAC/B,YAAW,UAAK,SAAL,YAAa;AAAA,UACxB,OAAO,wBAAS;AAAA,UAChB,UAAU,OAAO,SAAS,IAAI,OAAO,KAAK;AAAA,UAC1C,eAAc,sBAAK,gBAAL,mBAAkB,eAAlB,mBAA+B,GAAG,KAAK,MAAM,OAAO,OAApD,YAA0D;AAAA,UACxE,gBAAgB,uBAAK,uBAAL,YAA2B,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,SAAS,MAA/D,mBAAkE,UAAlE,YAAqF;AAAA,UACrG,UAAU;AAAA;AAAA,UACV,eAAeC,iBAAgB,IAAI;AAAA,UACnC,iBAAgB,KAAAC,kBAAiB,IAAI,MAArB,YAA0B;AAAA,UAC1C,UAAS,UAAK,YAAY,mBAAjB,YAAmC;AAAA,UAC5C,WAAU,UAAK,QAAL,YAAY;AAAA,UACtB,UAAU;AAAA;AAAA,UACV,YAAW,KAAAC,kBAAgB,kCAAM,UAAN,mBAAc,GAAG,GAAG,MAApC,YAAyC;AAAA,UACpD,YAAW,kCAAK,WAAL,mBAAa,WAAb,mBAAqB,KAAK,OAAK,EAAE,kBAAjC,mBAAgD,WAAhD,mBAAwD,eAAxD,YAAsE;AAAA,UACjF,iBAAgB,UAAK,mBAAL,YAAuB;AAAA,QACzC;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,CAAC,YAAoD;AAC1D,QAAI,mCAAS,MAAO,QAAO,QAAQ;AAEnC,QAAI,mCAAS,UAAU;AACrB,aAAO,QAAQ,SACZ,IAAI,CAAC,SAAS,KAAK,OAAO,QAAQ,EAClC,OAAO,CAAC,UAA2B,UAAU,MAAS,EACtD,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC;AAAA,IAC1C;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,CAAC,YAA0D;AACrE,QAAI,mCAAS,WAAY,QAAO,QAAQ;AAExC,QAAI,mCAAS,UAAU;AACrB,aAAO,QAAQ,SACZ,IAAI,CAAC,SAAS,KAAK,EAAE,EACrB,OAAO,CAAC,OAAqB,QAAQ,EAAE,CAAC;AAAA,IAC7C;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,CAAC,YAAwD;AAC9D,QAAI,mCAAS,MAAO,QAAO,QAAQ;AAEnC,QAAI,mCAAS,UAAU;AACrB,aAAO,QAAQ,SAAS,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,KAAK;AAAA,IAC/D;AAEA,WAAO;AAAA,EACT;AACF;;;AC9DO,IAAM,kBAAkB;AAAA,EAC7B,GAAG;AAAA;AAAA,EAEH,GAAG;AAAA;AAAA,EAEH,OAAO,CAAC,YAAkC;AACxC,QAAI,QAAQ,SAAS,OAAO;AAC1B,aAAO,gBAAgB,MAAM,OAAsC;AAAA,IACrE;AAEA,QAAI,QAAQ,SAAS,OAAO;AAC1B,aAAO,gBAAgB,MAAM,OAAsC;AAAA,IACrE;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,CAAC,YAAuD;AAClE,QAAI,QAAQ,SAAS,OAAO;AAC1B,aAAO,gBAAgB,WAAW,OAAsC;AAAA,IAC1E;AAEA,QAAI,QAAQ,SAAS,OAAO;AAC1B,aAAO,gBAAgB,WAAW,OAAsC;AAAA,IAC1E;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,CAAC,YAAiD;AACvD,QAAI,QAAQ,SAAS,OAAO;AAC1B,aAAO,gBAAgB,MAAM,OAAkC;AAAA,IACjE;AAEA,QAAI,QAAQ,SAAS,OAAO;AAC1B,aAAO,gBAAgB,MAAM,OAAkC;AAAA,IACjE;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,CAAC,YAAkC;AACxC,QAAI,QAAQ,SAAS,OAAO;AAC1B,aAAO,gBAAgB,MAAM,OAAkC;AAAA,IACjE;AAEA,QAAI,QAAQ,SAAS,OAAO;AAC1B,aAAO,gBAAgB,MAAM,OAAkC;AAAA,IACjE;AAAA,EACF;AAAA;AAAA,EAGA,gBAAgB,CAAC,YAAyD;AACxE,QAAI,mCAAS,eAAgB,QAAO,QAAQ;AAE5C,QAAI,mCAAS,UAAU;AACrB,YAAM,QAAQ,QAAQ,SAAS,QAAQ,OAAK,EAAE,MAAM,IAAI,OAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC1E,YAAM,SAAS,UAAU,KAAK,EAAE,KAAK,GAAG;AACxC,aAAO,UAAU;AAAA,IACnB;AAEA,WAAO;AAAA,EACT;AACF;;;ACxFO,IAAM,kBAAkB,CAAC,QAAqB;AAFrD;AAGE,QAAM,WAAW,IAAI;AAErB,MAAI,UAAU;AACZ,UAAM,aAAY,eAAI,oBAAJ,mBAAqB,iBAArB,mBAAmC;AACrD,WAAO,YACH,qBAAqB,SAAS,KAC9B;AAAA,EACN;AAEA,SAAO,IAAI,OACP,mBAAmB,IAAI,KAAK,YAAY,CAAC,KACzC;AACN;AAGO,IAAM,kBAAkB,CAAC,QAAqB;AACnD,QAAM,WAAW,IAAI;AACrB,MAAI,CAAC,SAAU,QAAO;AAEtB,QAAM,OAAO,SAAS,UAAU,EAAE;AAClC,SAAO,MAAM,IAAI,IAAI,IAAI;AAC3B;;;ACbO,IAAM,gBAAgB;AAAA,EAE3B,GAAG;AAAA,EAEH,aAAa,CAAC,YAAqD;AAfrE;AAgBI,YAAO,wCAAS,gBAAT,YAAwB;AAAA,EACjC;AAAA,EAEA,WAAW,CAAC,YAAgE;AAC1E,QAAI,QAAQ,WAAW;AACrB,aAAO,QAAQ,UAAU,IAAI,CAAC,MAAG;AArBvC;AAqB2C;AAAA,UACnC,aAAY,OAAE,eAAF,YAAgB;AAAA,UAC5B,WAAU,OAAE,UAAF,YAAW;AAAA,UACrB,eAAe,gBAAgB,CAAC;AAAA,UAChC,eAAe,gBAAgB,CAAC;AAAA,QAClC;AAAA,OAAE;AAAA,IACJ;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,CAAC,YAAkC;AAhC9C;AAiCI,YAAO,aAAQ,YAAR,YAAmB;AAAA,EAC5B;AACF;;;ACzBA,IAAM,WAAW;AAAA,EACf,MAAM;AAAA,EACN,UAAU;AAAA,EACV,QAAQ;AACV;AAIA,eAAsB,cAAc,SAAyB,WAAsB;AAlBnF;AAmBE,QAAM,cAAc,OAAO,SAAS;AACpC,MAAI,CAAC,YAAa;AAElB,QAAM,iBAAiB,QAAQ;AAC/B,QAAM,WAAU,cAAS,cAA4B,MAArC,YAA0C;AAE1D,QAAM,UAAU,MAAM,QAAQ;AAAA,IAC5B,YAAY,eAAe,IAAI,OAAO,UAAU;AAC9C,YAAM,SAAS,QAAQ,KAA6B;AAEpD,UAAI,OAAO,WAAW,YAAY;AAChC,gBAAQ,MAAM,wBAAwB,KAAK,kBAAkB,cAAc,GAAG;AAC9E,eAAO,CAAC,OAAO,IAAI;AAAA,MACrB;AAEA,aAAO,CAAC,OAAO,MAAM,OAAO,SAAS,SAAS,CAAC;AAAA,IACjD,CAAC;AAAA,EACH;AAEA,SAAO,OAAO,YAAY,OAAO;AACnC;;;A9BjCA,eAAe,cACb,OACA,SACA;AACA,MAAI;AACF,UAAM,aAAa,MAAM,cAAc,SAAS,KAAK;AAErD,QAAI,YAAY,GAAG;AAEjB,cAAQ,IAAI,WAAW,KAAK,4BAA4B;AAAA,QACtD;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO,MAAM;AAAA,MACX;AAAA,MACA,OAAO,OAAO,CAAC,GAAG,YAAY,EAAE,QAAQ,QAAQ,OAAO,CAAC;AAAA,IAC1D;AAAA,EACF,SAAS,KAAK;AACZ,WAAO,QAAQ,MAAM,6BAA6B,KAAK,KAAK,GAAG;AAAA,EACjE;AACF;AAIA,IAAO,cAAQ;AAAA,EACb;AAAA,EACA;AACF;","names":["_a","_a","document","document","hashedDocument","_a","_b","getItemCategory","getItemCategory2","resizeVtexImage","getItemShippingTier","getItemShippingTier","getItemCategory","getItemCategory2","resizeVtexImage","_a","_b","_a","_b","getItemCategory","getItemCategory2","resizeVtexImage","getItemCategory","getItemCategory2","resizeVtexImage","getItemCategory","getItemCategory2","resizeVtexImage"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/core/constants.ts","../src/pushToDatalayer.ts","../src/params/legacy/utils/index.ts","../src/params/legacy/resolvers/brand/fromOrderForm.ts","../src/params/legacy/resolvers/brand/fromItem.ts","../src/params/legacy/brand.ts","../src/params/legacy/utils/itemListAttribution.ts","../src/params/legacy/resolvers/items/fromOrderForm.ts","../src/params/legacy/resolvers/items/fromItem.ts","../src/params/legacy/resolvers/items/fromList.ts","../src/params/legacy/resolvers/items/fromPdp.ts","../src/params/legacy/resolvers/items/fromBanner.ts","../src/params/legacy/items.ts","../src/core/utils.ts","../src/params/legacy/resolvers/paymentType/fromOrderForm.ts","../src/params/legacy/resolvers/paymentType/fromOrderGroup.ts","../src/params/legacy/paymentType.ts","../src/params/userInfo.ts","../src/params/legacy/index.ts","../src/params/adapters/meta/index.ts","../src/core/farm.ts","../src/params/adapters/deco/utils.ts","../src/params/adapters/deco/index.ts","../src/params/adapters/headless/utils.ts","../src/params/adapters/headless/zones/PDP.ts","../src/params/adapters/headless/zones/PDC.ts","../src/params/adapters/headless/index.ts","../src/params/adapters/pickup/utils.ts","../src/params/adapters/pickup/index.ts","../src/params/adapters/orderForm/utils.ts","../src/params/adapters/orderForm/index.ts","../src/formatter.ts"],"sourcesContent":["import { pushToDataLayer } from './pushToDatalayer';\nimport { getParameters } from './formatter';\nimport { EVENTS } from './core/constants';\nimport { isDebugMode } from './core/utils';\nimport type { AdapterPayload, MetaForEvent, EventName, InitialConfig } from './types';\n\nlet config: InitialConfig = { brand: '', currency: 'BRL' }\n\nexport function initTracker(c: InitialConfig) {\n config = c\n}\n\nasync function trackWebEvent<E extends EventName>(\n event: E,\n context: AdapterPayload & { meta: MetaForEvent<E>, window?: unknown }\n) {\n try {\n const parameters = await getParameters(context, event, config); // object data to be sent\n\n if (isDebugMode()) {\n console.log(`[DT v2] ${event}, context e parameters: `, {\n context,\n parameters,\n })\n }\n\n return await pushToDataLayer(\n event,\n Object.assign({}, parameters, { window: context.window })\n );\n } catch (err) {\n return console.error(`[DT] Error tracking event ${event}:`, err);\n }\n}\n\nexport { trackWebEvent, EVENTS };\n\nexport default {\n trackWebEvent,\n EVENTS,\n}\n","export const EVENTS = {\n CUSTOM_VIEW_CART: {\n name: \"custom_view_cart\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"total_discount\",\n \"subtotal\",\n \"items\",\n ],\n } as const,\n\n ADD_TO_WISHLIST: {\n name: \"add_to_wishlist\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"items\",\n ],\n } as const,\n\n CUSTOM_ADD_TO_CART: {\n name: \"custom_add_to_cart\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"items\",\n ],\n } as const,\n\n CUSTOM_REMOVE_FROM_CART: {\n name: \"custom_remove_from_cart\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"items\",\n ],\n } as const,\n\n ADD_TO_CART: {\n name: \"add_to_cart\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"items\",\n ],\n } as const,\n\n REMOVE_FROM_CART: {\n name: \"remove_from_cart\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"items\",\n ],\n } as const,\n\n ADD_COUPON: {\n name: \"add_coupon\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"coupon\",\n \"coupon_message\",\n \"seller_cod_name\",\n ],\n } as const,\n\n SEARCH: {\n name: \"search\",\n hasEcommerce: false,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"search_term\", \"search_found\", \"search_quantity\"],\n } as const,\n\n SEARCH_ZIPCODE: {\n name: 'search_zipcode',\n hasEcommerce: false,\n destinations: ['DataLayer'],\n requiredParams: ['brand', 'region', 'shippings', 'zipcode', 'flag_pickup'],\n } as const,\n\n VIEW_PROMOTION: {\n name: \"view_promotion\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"currency\",\n \"promotion_name\",\n \"creative_slot\",\n \"creative_name\",\n // \"items\",\n ],\n } as const,\n\n SELECT_PROMOTION: {\n name: \"select_promotion\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"region\",\n \"currency\",\n \"promotion_name\",\n \"creative_slot\",\n \"creative_name\",\n // \"items\",\n ],\n } as const,\n\n SELECT_CONTENT: {\n name: \"select_content\",\n hasEcommerce: false,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", 'content_type'],\n } as const,\n\n SELECT_ITEM: {\n name: \"select_item\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"region\", \"items\", \"line_items\"],\n } as const,\n\n VIEW_ITEM: {\n name: \"view_item\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"available_grid\",\n \"items\",\n ],\n } as const,\n\n CUSTOM_VIEW_ITEM: { // IO STORES\n name: \"custom_view_item\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"available_grid\",\n \"items\",\n ],\n } as const,\n\n VIEW_ITEM_LIST: {\n name: \"view_item_list\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\"region\", \"brand\", \"line_items\", \"items\"],\n } as const,\n\n BEGIN_CHECKOUT: {\n name: \"begin_checkout\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"items\"],\n } as const,\n\n CUSTOM_BEGIN_CHECKOUT: {\n name: \"custom_begin_checkout\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"items\"],\n } as const,\n\n AUTH_ACTION: {\n name: \"auth_action\",\n hasEcommerce: false,\n requiredParams: [\"region\", \"method\", \"type\", \"brand\"],\n destinations: [\"DataLayer\"],\n } as const,\n\n ADD_PERSONAL_INFO: {\n name: \"add_personal_info\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"pre_filled\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\"],\n } as const,\n\n CUSTOM_ADD_SHIPPING_INFO: {\n name: \"add_shipping_info\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"pre_filled\",\n \"shipping\",\n \"shipping_tier\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"total_discount\",\n \"subtotal\",\n \"items\"\n ],\n } as const,\n\n CUSTOM_ADD_PAYMENT_INFO: {\n name: \"add_payment_info\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n \"brand\",\n \"pre_filled\",\n \"line_items\",\n \"currency\",\n \"value\",\n \"total_discount\",\n \"payment_type\",\n \"subtotal\",\n \"items\"\n ],\n } as const,\n\n ORDER_REVIEWED: {\n name: \"order_reviewed\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\"brand\", \"line_items\", \"currency\", \"value\", \"total_discount\", \"subtotal\", \"payment_type\"],\n } as const,\n\n PURCHASE: {\n name: \"purchase\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n 'brand',\n 'shipping_tier',\n 'line_items',\n 'currency',\n 'value',\n 'shipping',\n 'transaction_id',\n 'total_discount',\n 'payment_type',\n 'seller_cod_name',\n 'subtotal',\n 'coupon',\n 'items'\n ],\n } as const,\n\n CUSTOM_PURCHASE: {\n name: \"custom_purchase\",\n hasEcommerce: true,\n destinations: [\"DataLayer\"],\n requiredParams: [\n 'brand',\n 'shipping_tier',\n 'line_items',\n 'currency',\n 'value',\n 'shipping',\n 'transaction_id',\n 'total_discount',\n 'payment_type',\n 'seller_cod_name',\n 'subtotal',\n 'coupon',\n 'items'\n ],\n } as const,\n\n CUSTOM_USER_INFO: {\n name: 'custom_user_info',\n hasEcommerce: false,\n destinations: [\"DataLayer\"],\n requiredParams: ['user_info']\n } as const,\n\n NOTIFY_ME: {\n name: 'notify_me',\n hasEcommerce: false,\n destinations: [\"DataLayer\"],\n requiredParams: ['brand', 'size', 'item_ref']\n },\n\n REFINE_RESULTS: {\n name: 'refine_results',\n hasEcommerce: false,\n destinations: [\"DataLayer\"],\n requiredParams: ['brand', 'region', 'color', 'price_range', 'size', 'category', 'ordering']\n } as const,\n\n GRID_SIZE: {\n name: 'grid_size',\n hasEcommerce: false,\n destinations: [\"DataLayer\"],\n requiredParams: ['brand', 'slot_per_line']\n } as const\n};\n\n\ntype EventName = keyof typeof EVENTS\n// EventName = 'ADD_TO_CART' | 'ADD_TO_WISHLIST' | 'CUSTOM_VIEW_CART' | ...\n\nexport type RequiredParamsOf<E extends EventName> = typeof EVENTS[E]['requiredParams'][number]\n// type RequiredParamsOf<'ADD_TO_CART'> = \n// 'brand' | 'region' | 'line_items' | 'currency' | 'value' | 'items'","import type { EventContext, EventName } from \"./types\";\nimport { EVENTS } from \"./core/constants\";\n\nexport function pushToDataLayer(event: string, context: EventContext) {\n const targetWindow = context.window || (typeof window !== 'undefined' ? window : null);\n if (!targetWindow) return;\n\n const payload = Object.assign({}, context);\n delete payload.window; // delete window prop and avoid to push as payload to dayalayer\n\n const eventName = event.toUpperCase() as EventName;\n const eventConfig = EVENTS[eventName] as { hasEcommerce: boolean };\n\n targetWindow.dataLayer = targetWindow.dataLayer || [];\n\n if (eventConfig?.hasEcommerce) {\n targetWindow.dataLayer.push({ ecommerce: null });\n targetWindow.dataLayer.push({ event: event.toLowerCase(), ecommerce: payload });\n } else {\n targetWindow.dataLayer.push(Object.assign({ event: event.toLowerCase() }, payload));\n }\n}","/**\n * Fetches product data for the given product id from the catalog API.\n *\n * @param id - The product identifier used as the `productId` query filter\n * @returns The parsed JSON response containing product data, or `undefined` if the request fails\n */\nexport async function getProductDataById(id: any) {\n try {\n const response = await fetch(\n `/api/catalog_system/pub/products/search?fq=productId:${id}`\n );\n\n return await response.json();\n } catch (e) {\n console.log('[DT] Erro ao buscar dados do produto', e);\n }\n}\n\nexport function resizeVtexImage(url: string, width = 500, height = 500) {\n return url?.replace(\n /(\\/arquivos\\/ids\\/\\d+)-\\d+-\\d+\\//,\n `$1-${width}-${height}/`\n );\n}\n\nexport function isPDP(url: string) {\n try {\n const { pathname } = new URL(url, window.location.origin);\n return /\\/p\\/?$/.test(pathname);\n } catch {\n return false;\n }\n}\n\nexport function extractRefIdFromUrl(url: string | null) {\n if (!url) return null;\n\n const path = (() => {\n try { return new URL(url, location.origin).pathname }\n catch { return url.split('?')[0] }\n })();\n\n const match = decodeURIComponent(path).match(/(\\d+-\\d+)(?=\\/p|$)/);\n return match ? match[1].replace('-', '_') : null;\n}\n\nexport async function getProductByRefId(url: string | null) {\n const refId = extractRefIdFromUrl(url);\n if (!refId) return console.error('Não foi possível extrair o RefId da URL'), null;\n\n try {\n const res = await fetch(`/api/catalog_system/pub/products/search?fq=alternateIds_RefId:${refId}`);\n if (!res.ok) throw new Error(`Erro na API: ${res.status}`);\n\n const products = await res.json();\n return products?.[0] || null;\n } catch (err) {\n console.error('Erro ao buscar dados do produto:', err);\n return null;\n }\n}\n\nexport function getItemShippingTier(orderForm: any, item: any) {\n const info = orderForm?.shippingData?.logisticsInfo?.find(\n (li: any) => li.itemId === item.id\n );\n\n const selectedSla = info?.slas?.find((sla: any) => sla.id === info.selectedSla);\n return selectedSla?.pickupStoreInfo?.friendlyName\n ? `retirada em loja: ${selectedSla.pickupStoreInfo.friendlyName}`\n : selectedSla?.name\n ? `Receba em casa: ${selectedSla.name}`\n : null;\n}\n\nexport async function getItemSku(item: any) {\n const product = await getProductDataById(item.productId || item.productID || item.item_group_id);\n\n if (!product.length) return null;\n\n return product[0].items.find((i: any) => i.name === item.skuName)?.itemId ?? null;\n}\n\nexport function getDiscount(item: any) {\n const strategies = [\n // 1. listPrice - sellingPrice\n () => {\n if (item?.listPrice != null && item?.sellingPrice != null) {\n const diff = Math.max(item.listPrice - item.sellingPrice, 0);\n return diff ? parseFloat((diff / 100).toFixed(2)) : 0;\n }\n return null;\n },\n\n // 2. listPrice - price\n () => {\n if (item?.listPrice != null && item?.price != null) {\n return Math.max(item.listPrice - item.price, 0);\n }\n return null;\n },\n\n // 3. desconto calculado.\n () => (item?.discount || item?.discount === 0 ? item.discount : null),\n ];\n\n for (const getValue of strategies) {\n const value = getValue();\n\n if (value !== null && value !== undefined) {\n return value;\n }\n }\n\n return 0;\n}\n\nexport function getItemCategory(item: any) {\n const keywords = [\"outlet\", \"bazar\", \"sale\"];\n const regex = new RegExp(keywords.join(\"|\"), \"i\"); // cria: /outlet|bazar|sale/i\n\n const strategies = [\n () => item?.item_category,\n () => item?.category,\n () => item?.categories, \n () => item?.productCategories?.[\"39\"],\n () => {\n /* \n Regra: percorre o array itemListElement buscando a categoria de nível raiz,\n identificada por URLs no formato \"/slug/\" (apenas um nível, ex: \"/bazar/\", \"/new-collection/\").\n Retorna o `name` correspondente a esse item.\n */\n const breadcrumb = item?.itemOffered?.breadcrumbList?.itemListElement;\n\n if (!Array.isArray(breadcrumb)) return null;\n\n const level1 = breadcrumb.find((el) => {\n const path = el?.item;\n if (!path) return false;\n\n // remove \"/\" do início/fim e divide\n const parts = path.replace(/^\\/|\\/$/g, '').split('/');\n\n return parts.length === 1;\n });\n\n return level1?.name || null;\n }\n ];\n\n for (const getValue of strategies) {\n const rawValue = getValue();\n\n if (rawValue) {\n const textToTest = Array.isArray(rawValue) ? rawValue.join(\" \") : String(rawValue);\n const match = textToTest.match(regex);\n\n if (match) {\n return match[0]\n }\n }\n }\n return \"Coleção\";\n}\n\n\nfunction extractCategory2Label(item: any) {\n const keywords = [\"outlet\", \"bazar\", \"sale\"];\n const regex = new RegExp(keywords.join(\"|\"), \"i\");\n\n const tryCategory = (data: [] | {}) => {\n if (!data) return null;\n \n const items = Array.isArray(data) ? data : Object.values(data || {});\n \n // de trás pra frente pra pegar o ultimo nivel da arvore da categoria\n for (let j = items.length - 1; j >= 0; j--) {\n const parts = items[j]?.split('/')?.filter(Boolean) || [];\n\n // busca a primeira categoria (da ultima pra primeira) que NÃO seja sale/outlet/bazar\n // Ex: \"/Outlet/Blusas/\" -> ignora \"Outlet\", retorna \"Blusas\"\n for (let i = parts.length - 1; i >= 0; i--) {\n if (!regex.test(parts[i])) return parts[i];\n }\n }\n return null;\n };\n\n const sources = [item?.productCategories, item?.categories];\n return sources.reduce((result, source) => result || tryCategory(source), null);\n}\n\nexport function getItemCategory2(item: any) {\n const strategies = [\n () => item?.item_category2, \n () => extractCategory2Label(item),\n () => item?.category?.split?.('>')?.[1]?.trim?.(), // deco select_item context\n () => item?.subGrup,\n ];\n\n for (const getValue of strategies) {\n const value = getValue();\n\n if (value !== null && value !== undefined) {\n return value;\n }\n }\n\n return null;\n}\n\nexport function getItemCategory4(item: any) {\n const tags = item?.additionalInfo?.tags || item?.tags;\n return Array.isArray(tags) && tags.length ? tags.join(',') : null;\n}\n\nconst BRAND_CODES = {\n farm: 'farmrio',\n 'farm etc': 'farmetc',\n 'farm rio': 'farmrio',\n} as const;\n\ntype Standardized = keyof typeof BRAND_CODES\ninterface BrandItem {\n brand?: string;\n additionalInfo?: {\n brandName?: string;\n };\n}\n\n/**\n * Extrai o código padronizado (ex: 'farmrio') de uma única string de marca.\n * Retorna null se não houver mapeamento.\n */\nfunction getBrandCode(brand: string | undefined): string | null {\n if (!brand) return null;\n const standardized = brand.toLowerCase().trim();\n return BRAND_CODES[standardized as Standardized] || null;\n}\n\n/**\n * Função principal que padroniza a marca ou lista de marcas para o formato final:\n * 'farmrio', 'farmetc', ou 'farmrio_farmetc'.\n */\nexport function normalizeBrand(input: string | BrandItem[] | BrandItem | string[] | undefined | null) {\n let brandStrings = [];\n\n if (Array.isArray(input) && input.every(item => typeof item === 'string')) {\n brandStrings = input as string[];\n } else if (Array.isArray(input)) {\n // Se for um Array, coleta a string da marca de cada item.\n brandStrings = input.map(item => item.additionalInfo?.brandName || item.brand);\n } else if (typeof input === 'object' && input !== null && 'brand' in input) {\n // Se for um Objeto único, trata como um Array de um único item (para reuso de lógica).\n brandStrings = [(input as BrandItem).additionalInfo?.brandName || (input as BrandItem).brand];\n } else if (typeof input === 'string') {\n // Se for uma String (mal formatada ou não), trata diretamente.\n return getBrandCode(input);\n } else {\n // Se for undefined, null, ou outro tipo não esperado.\n return null;\n }\n\n const brandCodes = brandStrings\n .map(getBrandCode)\n .filter((code): code is string => code !== null); // ['farmrio', 'farmetc', 'farmrio']\n\n const uniqueSortedCodes = [...new Set(brandCodes)].sort(); // ['farmetc', 'farmrio']\n\n // Retorna a combinação ('farmrio', 'farmetc', ou 'farmrio_farmetc').\n return uniqueSortedCodes.length > 0 ? uniqueSortedCodes.join('_') : null;\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromOrderForm(context: Record<string, any>) {\n if (!context.orderForm && !context.orderForm.items?.length) return null;\n\n const items = context.orderForm.items;\n\n return normalizeBrand(items);\n}\n","import { normalizeBrand } from '../../utils';\n\nexport function brandFromItem(context: Record<string, any>) {\n const { item } = context;\n\n return normalizeBrand(item?.additionalInfo?.brandName || item.brand || item.item_brand);\n}\n","import { brandFromOrderForm } from './resolvers/brand/fromOrderForm';\nimport { brandFromItem } from './resolvers/brand/fromItem';\nimport { normalizeBrand } from './utils';\nimport type { EventContext, EventName } from '../types';\n\n/**\n * Determines the brand for an event by using the context or extracting it based on the event type.\n *\n * Prefers `context.brand` when present; otherwise selects a resolver based on `eventName` to extract the brand.\n *\n * @param context - The event context which may already contain a `brand` or provide data for extraction\n * @param eventName - The event name used to choose the extraction strategy\n * @returns The resolved brand value, or `null` if no brand could be determined\n */\nexport function getBrand(context: EventContext, eventName: EventName) {\n if (context?.brand) return normalizeBrand(context.brand) || context.brand || null;\n\n switch (eventName) {\n case 'CUSTOM_VIEW_CART':\n case 'ADD_COUPON':\n case 'ADD_PERSONAL_INFO':\n case 'CUSTOM_ADD_SHIPPING_INFO':\n case 'CUSTOM_ADD_PAYMENT_INFO':\n case 'BEGIN_CHECKOUT':\n case 'CUSTOM_BEGIN_CHECKOUT':\n case 'SEARCH_ZIPCODE':\n case 'ORDER_REVIEWED':\n case 'PURCHASE':\n case 'CUSTOM_PURCHASE':\n return brandFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'REMOVE_FROM_CART':\n return brandFromItem(context);\n default:\n return null;\n }\n}\n","const LAST_SELECTED_ITEM_KEY = 'last_selected_item';\nconst STORAGE_VIEWED = 'last_viewed_item';\nconst CART_LIST_HISTORY_KEY = 'cart_list_history';\nconst DAY_IN_MS = 24 * 60 * 60 * 1000;\n\ninterface StoredItemMemory {\n item_id: string;\n item_list_name: string;\n timestamp: number;\n}\n\ninterface CartHistoryEntry {\n item_id: string;\n item_list_name: string;\n}\n\nfunction getStorage(): Storage | null {\n try {\n if (typeof window === 'undefined' || !window.localStorage) return null;\n return window.localStorage;\n } catch {\n return null;\n }\n}\n\nfunction parseJSON<T>(value: string | null): T | null {\n if (!value) return null;\n\n try {\n return JSON.parse(value) as T;\n } catch {\n return null;\n }\n}\n\nfunction isFreshTimestamp(timestamp: number): boolean {\n const elapsed = Date.now() - timestamp;\n return elapsed >= 0 && elapsed < DAY_IN_MS;\n}\n\nfunction isStoredItemMemory(value: unknown): value is StoredItemMemory {\n if (!value || typeof value !== 'object') return false;\n\n const candidate = value as Record<string, unknown>;\n return (\n typeof candidate.item_id === 'string' &&\n typeof candidate.item_list_name === 'string' &&\n typeof candidate.timestamp === 'number'\n );\n}\n\nfunction normalizeStoredItemMemory(value: unknown): StoredItemMemory | null {\n if (!value || typeof value !== 'object') return null;\n\n const candidate = value as Record<string, unknown>;\n const itemId = candidate.item_id;\n const itemListName = candidate.item_list_name;\n const timestamp = candidate.timestamp;\n\n if (\n typeof itemId !== 'string' ||\n typeof itemListName !== 'string' ||\n typeof timestamp !== 'number'\n ) {\n return null;\n }\n\n return {\n item_id: itemId,\n item_list_name: itemListName,\n timestamp,\n };\n}\n\nfunction resolveIdFromUnknownItem(item: Record<string, any> | null | undefined): string | null {\n const id =\n item?.productID ??\n item?.productId ??\n item?.item_group_id ??\n item?.item_id ??\n item?.id ??\n null;\n\n return id == null ? null : String(id);\n}\n\nexport function resolveItemId(item: Record<string, any> | null | undefined): string | null {\n return resolveIdFromUnknownItem(item);\n}\n\nfunction readStoredItem(key: string): StoredItemMemory | null {\n const storage = getStorage();\n if (!storage) return null;\n\n try {\n const parsed = parseJSON<unknown>(storage.getItem(key));\n const normalized = normalizeStoredItemMemory(parsed);\n return normalized && isStoredItemMemory(normalized) ? normalized : null;\n } catch {\n return null;\n }\n}\n\nfunction writeStoredItem(key: string, value: StoredItemMemory): void {\n const storage = getStorage();\n if (!storage) return;\n\n try {\n storage.setItem(key, JSON.stringify(value));\n } catch {\n // Analytics must never break storefront UI\n }\n}\n\nfunction readCartHistory(): CartHistoryEntry[] {\n const storage = getStorage();\n if (!storage) return [];\n\n try {\n const parsed = parseJSON<unknown>(storage.getItem(CART_LIST_HISTORY_KEY));\n if (!Array.isArray(parsed)) return [];\n\n return parsed.filter((entry): entry is CartHistoryEntry => (\n !!entry &&\n typeof entry === 'object' &&\n typeof (entry as Record<string, unknown>).item_id === 'string' &&\n typeof (entry as Record<string, unknown>).item_list_name === 'string'\n ));\n } catch {\n return [];\n }\n}\n\nfunction writeCartHistory(history: CartHistoryEntry[]): void {\n const storage = getStorage();\n if (!storage) return;\n\n try {\n storage.setItem(CART_LIST_HISTORY_KEY, JSON.stringify(history));\n } catch {\n // Analytics must never break storefront UI\n }\n}\n\nfunction getLatestItemListNameById(history: CartHistoryEntry[]) {\n const byId = new Map<string, string>();\n\n for (let index = history.length - 1; index >= 0; index -= 1) {\n const entry = history[index];\n if (!byId.has(entry.item_id)) {\n byId.set(entry.item_id, entry.item_list_name);\n }\n }\n\n return byId;\n}\n\nexport function saveSelectedItem(productId: string | number | null | undefined, listName: string | null | undefined) {\n if (productId == null || !listName) return;\n\n const payload: StoredItemMemory = {\n item_id: String(productId),\n item_list_name: String(listName),\n timestamp: Date.now(),\n };\n\n writeStoredItem(LAST_SELECTED_ITEM_KEY, payload);\n}\n\nexport function saveViewedItem(productId: string | number | null | undefined, listName: string | null | undefined) {\n if (productId == null) return;\n\n const payload: StoredItemMemory = {\n item_id: String(productId),\n item_list_name: String(listName ?? 'PDP'),\n timestamp: Date.now(),\n };\n\n writeStoredItem(STORAGE_VIEWED, payload);\n}\n\nexport function resolveItemListName(params: {\n event: string;\n item: Record<string, any> | null | undefined;\n itemListName: string | null | undefined;\n}) {\n const { event, item, itemListName } = params;\n const currentListName = itemListName ?? null;\n const isResolvableEvent = event === 'VIEW_ITEM' || event === 'ADD_TO_CART';\n\n if (!isResolvableEvent) return currentListName;\n const currentItemId = resolveIdFromUnknownItem(item);\n\n if (event === 'VIEW_ITEM') {\n if (!currentItemId) return 'PDP';\n\n const selectedItem = readStoredItem(LAST_SELECTED_ITEM_KEY);\n if (!selectedItem) return 'PDP';\n\n if (selectedItem.item_id === currentItemId && isFreshTimestamp(selectedItem.timestamp)) {\n return selectedItem.item_list_name;\n }\n\n return 'PDP';\n }\n\n // For add_to_cart, keep explicit non-PDP origin untouched.\n if (currentListName !== 'PDP' && currentListName !== null) return currentListName;\n if (!currentItemId) return currentListName;\n\n const viewedItem = readStoredItem(STORAGE_VIEWED);\n if (viewedItem && viewedItem.item_id === currentItemId && isFreshTimestamp(viewedItem.timestamp)) {\n return viewedItem.item_list_name;\n }\n\n return currentListName === 'PDP' ? 'PDP' : null;\n}\n\nexport function appendCartHistory(productId: string | number | null | undefined, listName: string | null | undefined) {\n if (productId == null) return;\n\n const history = readCartHistory();\n history.push({\n item_id: String(productId),\n item_list_name: listName ? String(listName) : 'PDP',\n });\n\n writeCartHistory(history);\n}\n\nexport function getCartHistoryItemListNameMap() {\n const history = readCartHistory();\n if (!history.length) return null;\n\n return getLatestItemListNameById(history);\n}\n\nexport function resolveItemListNameFromCartHistory(\n item: Record<string, any> | null | undefined,\n cartHistoryMap: Map<string, string> | null = null\n) {\n const itemId = resolveIdFromUnknownItem(item);\n const map = cartHistoryMap ?? getCartHistoryItemListNameMap();\n\n if (!itemId) return undefined;\n\n const resolved = map?.get(itemId);\n return resolved;\n}\n\nfunction pickSelectedItemFromResolvedItems(items: Record<string, any>[], source: Record<string, any>): Record<string, any> | null {\n if (!Array.isArray(items) || items.length === 0) return null;\n\n if (typeof source?.index === 'number') {\n const indexed = items.find((item) => item?.index === source.index) ?? items[source.index];\n if (indexed && typeof indexed === 'object') return indexed;\n }\n\n return items[0];\n}\n\nexport function persistSelectItemOriginFromResolvedItems(items: Record<string, any>[], source: Record<string, any>) {\n const selectedItem = pickSelectedItemFromResolvedItems(items, source);\n if (!selectedItem) return;\n\n const productId = resolveIdFromUnknownItem(selectedItem);\n const listName = selectedItem?.item_list_name ?? source?.itemListName ?? source?.item_list_name ?? null;\n saveSelectedItem(productId, listName);\n}\n","import type { EventContext } from '@src/types';\n\nimport {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n normalizeBrand,\n resizeVtexImage,\n} from '../../utils';\nimport {\n getCartHistoryItemListNameMap,\n resolveItemListNameFromCartHistory,\n} from '../../utils/itemListAttribution';\n\n/**\n * Builds an array of normalized item objects from the order form contained in the given context.\n *\n * @param context - EventContext containing an orderForm with items to convert\n * @returns An array of item-like objects derived from `context.orderForm.items`, each containing fields such as `item_id`, `price`, `quantity`, `item_sku`, `item_name`, category and variant attributes, and `discount`\n */\nexport async function itemsFromOrderForm(context: EventContext) {\n const items = context.orderForm?.items || [];\n const cartHistoryMap = getCartHistoryItemListNameMap();\n\n if (!items.length) return [];\n\n return await Promise.all(\n items.map(async (item: EventContext) => ({\n item_id: item.productId,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: getItemShippingTier(context.orderForm, item),\n price: parseFloat((item?.price / 100).toFixed(2)) || 0,\n quantity: item.quantity || 1,\n item_ref: item.refId || null,\n item_brand: normalizeBrand(item.additionalInfo?.brandName) || item.additionalInfo?.brandName || null,\n item_sku: (await getItemSku(item)) || null,\n item_name: item?.name.replace(item?.skuName, '').trim() || item.name || null,\n item_category: getItemCategory(item) || null,\n item_variant: item?.skuName?.split(' - ')[0]?.trim() || '',\n item_variant2: item?.skuName?.split(' - ')[1]?.trim() || '',\n item_url: `https://www.farmrio.com.br${item.detailUrl}` || null,\n discount: getDiscount(item),\n image_url: resizeVtexImage(item?.image) || resizeVtexImage(item?.imageUrl) || null,\n item_list_name: resolveItemListNameFromCartHistory(item, cartHistoryMap) ?? null,\n }))\n );\n}\n","import {\n getItemSku,\n getDiscount,\n getItemCategory,\n getItemCategory2,\n getItemCategory4,\n getItemShippingTier,\n resizeVtexImage,\n} from '../../utils';\nimport { appendCartHistory, resolveItemId, resolveItemListName } from '../../utils/itemListAttribution';\n\nexport async function itemsFromItem(context: Record<string, any>, event: string) {\n const { item, orderForm, itemListName } = context;\n const resolvedListName = resolveItemListName({ event, item, itemListName });\n const resolvedItemId = resolveItemId(item);\n\n if (event === 'ADD_TO_CART') {\n appendCartHistory(resolvedItemId, resolvedListName);\n }\n\n return [\n {\n index: typeof item?.index === 'number' ? item.index : null,\n quantity: 1,\n item_id: item?.productId || item?.item_group_id || item?.item_id || item?.id || null,\n item_category2: getItemCategory2(item),\n item_category4: getItemCategory4(item),\n item_shipping_tier: event === 'REMOVE_FROM_CART' ? getItemShippingTier(orderForm, item) : null,\n price: item?.price || 0,\n item_ref: item?.ref || item?.refId || item?.item_ref || item?.additionalProperty?.find((i: { name: string }) => i.name === \"RefId\").value || item?.itemOffered?.gtin.substring(0, item?.itemOffered?.gtin.lastIndexOf('_')) || null,\n item_brand: item?.additionalInfo?.brandName || item?.item_brand || item?.brand?.name || item?.itemOffered?.brand?.name || null,\n item_sku: item?.sku || item?.itemOffered?.sku || (await getItemSku(item)) || null,\n item_name: item?.name?.replace(item?.skuName, '').trim() || item?.name?.split(' - ').shift() || item?.item_name?.split(' - ').shift() || item?.itemOffered?.isVariantOf?.name?.split(' - ').shift() || null,\n item_category: getItemCategory(item) || null,\n // item_variant: (item?.skuName || item?.item_variant || item?.name || item?.itemOffered.name).split(/[-/]/)[0].trim() || null,\n item_variant: (item?.skuName || item?.item_variant || item?.name || item?.itemOffered.name).split(' - ')[0]?.trim() || null,\n // item_variant2: item?.size || item?.itemAttributes?.size || (item?.skuName || item?.name || item?.itemOffered.name)?.split(/[-/]/).pop()?.trim() || null,\n item_variant2: item?.size || item?.itemAttributes?.size || (item?.skuName || item?.name || item?.itemOffered.name)?.split(' - ')[1]?.trim() || null,\n discount: getDiscount(item),\n item_list_name: resolvedListName,\n\n item_url: item?.item_url || null, // add_to_cart dito\n image_url: resizeVtexImage(item?.image) || resizeVtexImage(item?.imageUrl) || null,\n },\n ];\n}\n \n","import { getDiscount, getItemCategory, getItemCategory2, normalizeBrand } from '../../utils';\n\nexport async function itemsFromList(context: Record<string, any>) {\n return (context?.list || []).map((item: any) => {\n return {\n price: item?.price?.list || item?.price || item?.offers?.lowPrice || item?.priceRange?.listPrice?.highPrice || null,\n quantity: 1,\n item_ref: item?.ref || item?.item_ref || item?.referenceId?.[0].Value || item?.productReference || item?.additionalProperty.find((i: { name: string }) => i.name === \"RefId\").value || null,\n index: typeof context?.index === 'number' ? context.index : Number(item?.index),\n item_brand: item?.item_brand ? item.item_brand : item.isNotFarm ? item?.item_brand : normalizeBrand(item?.brand?.name) || normalizeBrand(context.brand) || normalizeBrand(item?.item_brand) || null,\n item_name: item?.productName?.split(' - ').shift() || item?.alternateName?.split(' - ').shift() || item?.item_name?.split(' - ').shift() || item?.seo?.title?.split(' - ').shift() || null,\n item_category: getItemCategory(item) || null,\n item_variant: item?.name?.split(\"-\")?.[0].trim() || item?.item_variant || item?.productName?.split(\"-\")?.[1].trim() || null,\n item_category2: getItemCategory2(item) || null,\n item_id: item?.productID || item?.productId || item?.item_id || item?.id || null,\n discount: getDiscount(item) || null,\n item_list_name: context?.itemListName || null,\n }\n })\n}\n","import {\n getDiscount,\n getItemCategory,\n getItemCategory2,\n normalizeBrand,\n resizeVtexImage,\n} from '../../utils';\nimport { resolveItemId, resolveItemListName, saveViewedItem } from '../../utils/itemListAttribution';\n\nexport async function itemsFromPDP(context: Record<string, any>, event: string) {\n const { item, value, brand } = context;\n const resolvedListName = resolveItemListName({ event, item, itemListName: null });\n const resolvedItemId = resolveItemId(item);\n\n if (event === 'VIEW_ITEM') {\n saveViewedItem(resolvedItemId, resolvedListName);\n }\n\n return [\n {\n price: value || 0,\n quantity: 1,\n item_ref: item?.ref || item?.additionalProperty?.find((i: { name: string }) => i.name === \"RefId\").value || item?.productReference || null,\n item_brand: item.isNotFarm ? item?.item_brand : normalizeBrand(item?.brand.name) || normalizeBrand(brand) || null,\n item_name: item?.productName || item?.alternateName || null,\n item_category: getItemCategory(item) || null,\n item_variant: item?.name?.split(\"-\")[0].trim() || null,\n item_category2: getItemCategory2(item) || item?.category?.split(\">\")[1]?.trim() || null,\n item_id: item?.productID || item?.productId || item?.item_group_id || null,\n discount: getDiscount(item) || null,\n\n // dito/insider params view_item\n item_sku: item?.sku || item?.productId || null,\n item_url: item?.url || item?.item_url || item?.link || null,\n image_url: resizeVtexImage(item?.image) || resizeVtexImage(item?.imageUrl) || null,\n seller_id: item?.seller || null,\n item_list_name: resolvedListName,\n },\n ];\n}\n","import {\n isPDP,\n normalizeBrand,\n getItemCategory,\n getItemCategory2,\n getProductByRefId,\n extractRefIdFromUrl,\n} from '../../utils';\n\nexport async function itemsFromBanner(context: Record<string, any>) {\n const isUrlFromPDP = isPDP(context?.bannerUrl);\n\n if (!isUrlFromPDP) return [];\n\n const product = await getProductByRefId(context?.bannerUrl);\n\n const item = product?.items[0];\n\n return {\n price: item?.sellers[0].commertialOffer.Price || 0,\n quantity: 1,\n item_ref: extractRefIdFromUrl(context?.bannerUrl),\n item_brand: normalizeBrand(product.brand) || null,\n item_name: product?.productName || product?.alternateName || product?.item_name || null,\n item_category: getItemCategory(product) || null,\n item_variant: item?.name?.split(\"-\").pop().trim() || null,\n item_category2: getItemCategory2(product) || null,\n item_id: product?.productId || null,\n discount: item?.sellers[0].commertialOffer.ListPrice - item?.sellers[0].commertialOffer.Price || null,\n }\n}\n","import { itemsFromOrderForm } from './resolvers/items/fromOrderForm';\nimport { itemsFromItem } from './resolvers/items/fromItem';\nimport { itemsFromList } from './resolvers/items/fromList';\nimport { itemsFromPDP } from './resolvers/items/fromPdp';\nimport { itemsFromBanner } from './resolvers/items/fromBanner';\nimport { persistSelectItemOriginFromResolvedItems } from './utils/itemListAttribution';\n\n/**\n * Selects the appropriate item resolver based on the event name and returns its result.\n *\n * @param context - Runtime context passed to the selected resolver\n * @param eventName - Event identifier that determines which resolver to use\n * @returns The resolved items for the event, or `null` if the event is not recognized\n */\nexport function getItems(context: Record<string, any>, eventName: string) {\n if (context?.items) return context.items;\n\n switch (eventName) {\n case 'CUSTOM_VIEW_CART':\n case 'BEGIN_CHECKOUT':\n case 'CUSTOM_BEGIN_CHECKOUT':\n case 'CUSTOM_ADD_SHIPPING_INFO':\n case 'CUSTOM_ADD_PAYMENT_INFO':\n case 'PURCHASE':\n case 'CUSTOM_PURCHASE':\n return itemsFromOrderForm(context);\n case 'ADD_TO_CART':\n case 'ADD_TO_WISHLIST':\n case 'REMOVE_FROM_CART':\n return itemsFromItem(context, eventName);\n case 'SELECT_ITEM':\n return itemsFromList(context).then((items) => {\n persistSelectItemOriginFromResolvedItems(items, context);\n return items;\n });\n case 'VIEW_ITEM_LIST':\n return itemsFromList(context)\n case 'VIEW_ITEM':\n case 'CUSTOM_VIEW_ITEM':\n return itemsFromPDP(context, eventName)\n case 'VIEW_PROMOTION':\n case 'SELECT_PROMOTION':\n return itemsFromBanner(context)\n default:\n return null;\n }\n}\n","export const isDebugMode = () => {\n if (typeof window === 'undefined') return false;\n\n try {\n const params = new URLSearchParams(window.location.search);\n return params.has('__trk_inspect__');\n } catch {\n // fallback para ambientes sem URLSearchParams\n return window.location.search.indexOf('__trk_inspect__') !== -1;\n }\n};\n\nexport function setCookie(name: string, value: string, days = 7) {\n const encodedValue = encodeURIComponent(value);\n\n let expires = \"\";\n if (days) {\n const date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = \"; expires=\" + date.toUTCString();\n }\n\n document.cookie = `${name}=${encodedValue}${expires}; path=/;`;\n}\n\nexport const paymentTypeMap = [\n ['vale', 'vale crédito'],\n ['pagaleve', 'pix'],\n ['pix parcel', 'pix parcelado'],\n ['pix', 'pix'],\n ['apple', 'apple pay'],\n ['google', 'google pay'],\n ['boleto', 'boleto'],\n ['paypal', 'paypal'],\n ['cred', 'cartão'],\n ['visa', 'cartão'],\n ['master', 'cartão'],\n ['amex', 'cartão'],\n ['elo', 'cartão'],\n ['hiper', 'cartão'],\n ['diner', 'cartão'],\n ['deb', 'cartão'],\n];\n\n\nexport const toNum = (val: unknown) => typeof val === 'string' ? Number(val.replace(/[^\\d,]/g, '').replace(',', '.')) : val\n\nexport const documentToHash = async (document: string | undefined): Promise<string | null> => {\n if (!document) return null\n\n const encoder = new TextEncoder();\n const data = encoder.encode(document);\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n\n return hashArray.map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nconst SIZE_ORDER: Record<string, string[]> = {\n alfabetico: ['PP', 'P', 'M', 'G', 'GG', 'XG', 'XGG', 'EG', 'EGG', '3G', '4G', '5G'],\n infantil: ['RN', '0-3M', '3-6M', '6-9M', '9-12M', '12-18M', '18-24M', 'P', 'M', 'G', 'GG'],\n}\n\nconst detectSizeType = (sizes: string[]): 'alfabetico' | 'numerico' | 'infantil' | 'desconhecido' => {\n if (sizes.every(s => /^\\d+([.,]\\d+)?$/.test(s))) return 'numerico'\n if (sizes.some(s => /^(RN|\\d+-\\d+M|\\d+M)$/i.test(s))) return 'infantil'\n if (sizes.every(s => SIZE_ORDER.alfabetico.includes(s.toUpperCase()))) return 'alfabetico'\n return 'desconhecido'\n}\n\nexport const sortSizes = (sizes: string[]): string[] => {\n const unique = [...new Set(sizes.filter(Boolean))]\n const type = detectSizeType(unique)\n\n if (type === 'numerico') {\n return unique.sort((a, b) => parseFloat(a) - parseFloat(b))\n }\n\n if (type === 'alfabetico' || type === 'infantil') {\n const order = SIZE_ORDER[type]\n return unique.sort((a, b) => {\n const ia = order.indexOf(a.toUpperCase())\n const ib = order.indexOf(b.toUpperCase())\n return (ia === -1 ? 999 : ia) - (ib === -1 ? 999 : ib)\n })\n }\n\n return unique\n}\n\nexport const capitalize = (str: string): string => str ? str[0].toUpperCase() + str.slice(1).toLowerCase() : \"\";\n\nexport const resizeVtexImage = (url: string | undefined, width = 500, height = 500) => {\n return url?.replace(\n /(\\/arquivos\\/ids\\/\\d+)-\\d+-\\d+\\//,\n `$1-${width}-${height}/`\n );\n}\n","import { paymentTypeMap } from \"../../../../core/utils\";\n\nexport function paymentTypeFromOrderForm(context: Record<string, any>) {\n if (context.payment_type) return context.payment_type;\n if (!context.orderForm) return null;\n\n const payments = context.orderForm.paymentData?.payments || [];\n const systems = context.orderForm.paymentData?.paymentSystems || [];\n if (!payments.length || !systems.length) return null;\n\n const selectedPayment = payments.find((p: { paymentSystem: string }) => p?.paymentSystem) || payments[0];\n const id = String(selectedPayment?.paymentSystem || '').trim();\n if (!id) return null;\n\n const system = systems.find((s: { id: string }) => String(s.id) === id);\n const name = system?.name?.toLowerCase() || '';\n const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n return match ? match[1] : null;\n}\n","import { paymentTypeMap } from \"../../../../core/utils\";\n\nexport function paymentTypeFromOrderGroup(context: Record<string, any>) {\n if (!context.orderForm) return null;\n\n const transactions = context.orderForm.paymentData?.transactions || [];\n if (!transactions.length) return null;\n\n const payments = transactions[0]?.payments || [];\n if (!payments.length) return null;\n\n const name = payments[0]?.paymentSystemName?.toLowerCase() || '';\n const match = paymentTypeMap.find(([key]) => name.includes(key));\n\n return match ? match[1] : null;\n}\n","import { paymentTypeFromOrderForm } from './resolvers/paymentType/fromOrderForm';\nimport { paymentTypeFromOrderGroup } from './resolvers/paymentType/fromOrderGroup';\n\n/**\n * Selects the appropriate payment_type resolver based on the event name and returns its result.\n *\n * @param context - Runtime context passed to the selected resolver\n * @param eventName - Event identifier that determines which resolver to use\n * @returns The resolved payment_type for the event, or `null` if the event is not recognized\n */\nexport function getPaymentType(context: Record<string, any>, eventName: string) {\n if (context?.paymentType) return context.paymentType;\n\n switch (eventName) {\n case 'ORDER_REVIEWED':\n case 'CUSTOM_ADD_PAYMENT_INFO':\n return paymentTypeFromOrderForm(context);\n case 'PURCHASE':\n case 'CUSTOM_PURCHASE':\n return paymentTypeFromOrderGroup(context)\n default:\n return null;\n }\n}\n","import type { UserInfoContext } from \"@src/types\";\nimport { documentToHash } from \"@core/utils\";\n\n // list of domains to avoid cors erros to fetch VTEX IO endpoint\n export const PROD_DOMAINS: Record<string, Record<string, string>> = {\n \"animale\": {\n \"store\": \"https://www.animale.com.br\",\n \"checkout\": \"https://secure.animale.com.br\",\n },\n \"lojafarm\": {\n \"store\": \"https://lojafarm.myvtex.com\"\n },\n \"mariafilo\": {\n \"store\": \"https://mariafilo.myvtex.com\",\n \"checkout\": \"https://secure.mariafilo.com.br\",\n },\n \"lojacrisbarros\": {\n \"store\": \"https://lojacrisbarros.myvtex.com\",\n \"checkout\": \"https://secure.crisbarros.com.br\",\n },\n \"lojaoffpremium\": {\n \"store\": \"https://lojaoffpremium.myvtex.com\",\n \"checkout\": \"https://secure.offpremium.com.br\",\n },\n \"bynv\": {\n \"store\": \"https://bynv.myvtex.com\",\n },\n \"lojafabula\": {\n \"store\": \"https://lojafabula.myvtex.com\",\n },\n };\n\nexport async function getUserInfo(context: UserInfoContext) {\n const domain = PROD_DOMAINS[context.account || 'animale']?.[context.platform || 'store'];\n\n if (!domain) return { customer: { email: context.userEmail, id: context?.userId }, address: null };\n\n try {\n const api = `${domain}/_v/user-info`;\n const response = await fetch(api, {\n method: 'POST',\n body: JSON.stringify({ email: context.userEmail })\n });\n\n if (response.status !== 200) {\n // profile/edit and checkout route; we get the info directly from the input text\n if (context?.manuallyInfo && context.manuallyInfo?.cpf) {\n const { cpf, birthDate, phone, firstName, lastName, email, email_optin } = context.manuallyInfo\n const document = cpf?.replace(/\\D/g, '')\n const hashedDocument = await documentToHash(document)\n\n return {\n address: null,\n customer: {\n email,\n phone,\n document,\n lastName,\n birthDate,\n firstName,\n email_optin,\n homePhone: phone,\n cpf: hashedDocument,\n }\n };\n }\n\n return { customer: { email: context.userEmail, id: context?.userId }, address: null };\n }\n\n const res = await response.json();\n const document = res?.customer?.document?.replace(/\\D/g, '')\n const hashedDocument = await documentToHash(document)\n\n return { ...res, customer: { ...res.customer, cpf: hashedDocument, document } }\n } catch (_) {\n // profile/edit and checkout route; we get the info directly from the input text\n if (context?.manuallyInfo && context.manuallyInfo?.cpf) {\n const { cpf, birthDate, phone, firstName, lastName, email, email_optin } = context.manuallyInfo\n const document = cpf?.replace(/\\D/g, '')\n const hashedDocument = await documentToHash(document)\n\n return {\n address: null,\n customer: {\n email,\n phone,\n document,\n lastName,\n birthDate,\n firstName,\n email_optin,\n homePhone: phone,\n cpf: hashedDocument,\n }\n };\n }\n\n return { customer: { email: context.userEmail, id: context?.userId }, address: null };\n }\n}","import type { EventContext, EventName, LogisticInfo } from '../../types';\nimport { getBrand } from './brand';\nimport { getItems } from './items';\nimport { getPaymentType } from './paymentType';\nimport { getUserInfo } from '../userInfo';\nimport { toNum } from '../../core/utils';\n\n\nexport const legacyGetters = {\n brand: getBrand,\n\n items: getItems,\n\n payment_type: getPaymentType,\n\n user_info: getUserInfo, // global\n\n content_type: (context: EventContext, eventName: EventName) => {\n if (context?.content_type) return context.content_type;\n\n return `regiao`\n .concat(':' + context.category)\n .concat(context.subcategory ? ':' + context.subcategory : '')\n .concat(':' + context.componentName) || null\n },\n\n region: (context: EventContext, eventName: EventName) => {\n return context.region || null;\n },\n\n line_items: (context: EventContext, eventName: EventName) => {\n if (context?.lineItems) return context.lineItems;\n\n if (context?.item) {\n return [context.item.productId || context.item.productID || context.item.item_id];\n }\n\n if (context?.list) {\n return context.list.map((item: { productID: string, id: string, productId: string }) => item?.productID || item?.id || item?.productId)\n }\n\n return (context.orderForm.items || [])\n .map((item: EventContext) => item.productId)\n .join(',');\n },\n\n currency: (context: EventContext, eventName: EventName) => {\n if (context?.currency) return context.currency\n\n if (context?.bannerUrl) return 'BRL'\n\n if (context?.item) {\n return context.item?.offers?.priceCurrency || 'BRL'\n }\n\n return context.orderForm?.storePreferencesData?.currencyCode || null;\n },\n\n value: (context: EventContext, eventName: EventName) => {\n if (context?.value) return toNum(context.value)\n\n return context.item ? toNum(context.item?.price) : context.orderForm?.value != null\n ? context.orderForm.value / 100\n : null;\n },\n\n total_discount: (context: EventContext, eventName: EventName) => {\n if (context?.totalDiscount) return context.totalDiscount\n\n const totalsList = context.orderForm?.totalizers || context.orderForm?.totals || []; // totals for ordergroup and orderform have different names\n const items = context.orderForm.items;\n const totalDiscount = items.reduce((acc: number, item: { quantity: number, listPrice: number, sellingPrice: number }) => {\n const unitDiscount = Math.max(0, item.listPrice - item.sellingPrice);\n return acc + (unitDiscount * item.quantity);\n }, 0);\n\n const discounts = totalsList.find((t: { id: string }) => t.id === 'Discounts');\n return Math.abs((discounts?.value || 0) + totalDiscount) / 100 || null;\n },\n\n subtotal: (context: EventContext, eventName: EventName) => {\n const totalsList = context.orderForm?.totalizers || context.orderForm?.totals || []; // totals for ordergroup and orderform have different names\n\n const subtotal =\n totalsList\n .filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: number, t: EventContext) => acc + (t.value || 0), 0) / 100 || 0;\n\n return subtotal\n },\n\n coupon_message: (context: EventContext, eventName: EventName) => {\n if (context.couponMessage) return context.couponMessage;\n\n const messages = context.orderForm?.messages || [];\n\n if (messages.length === 0) return null;\n\n const couponMessages = messages.filter((msg: EventContext) =>\n msg.text.toLowerCase().includes('cupom')\n );\n\n if (couponMessages.length === 0) return null;\n\n return couponMessages.map((msg: EventContext) => msg.text).join(' | ');\n },\n\n seller_cod_name: (context: EventContext, eventName: EventName) => {\n return context.appliedSellerCodName || context?.orderForm.marketingData.utmiCampaign || null;\n },\n\n coupon: (context: EventContext, eventName: EventName) => {\n return context.appliedCoupon || context?.orderForm?.marketingData?.coupon || null;\n },\n\n pre_filled: (context: EventContext, eventName: EventName) => {\n return !!context.preFilled;\n },\n\n search_term: (context: EventContext, eventName: EventName) => {\n return context.searchTerm || null;\n },\n\n search_found: (context: EventContext, eventName: EventName) => {\n return !!context.searchFound;\n },\n\n search_quantity: (context: EventContext, eventName: EventName) => {\n return context.searchQuantity || 0;\n },\n\n promotion_name: (context: EventContext, eventName: EventName) => {\n return context.promotionName || null;\n },\n\n creative_name: (context: EventContext, eventName: EventName) => {\n return context.creativeName || null;\n },\n\n creative_slot: (context: EventContext, eventName: EventName) => {\n return context.creativeSlot || null;\n },\n\n zipcode: (context: EventContext, eventName: EventName) => {\n return context.zipCode || null;\n },\n\n size: (context: EventContext, eventName: EventName) => {\n return context.size || null;\n },\n\n item_ref: (context: EventContext, eventName: EventName) => {\n return context.itemRef || null;\n },\n\n flag_pickup: (context: EventContext, eventName: EventName) => {\n const orderForm = context.orderForm;\n if (!orderForm) return null;\n\n const logisticsInfo = orderForm.shippingData?.logisticsInfo || [];\n const hasPickup = logisticsInfo.some((info: LogisticInfo) =>\n info.slas?.some((sla) => sla.deliveryChannel === 'pickup-in-point')\n );\n\n return hasPickup\n },\n\n shippings: (context: EventContext, eventName: EventName) => {\n const orderForm = context.orderForm;\n if (!orderForm) return null;\n\n const groupShipping: Record<string, any> = {};\n\n for (const info of orderForm.shippingData.logisticsInfo) {\n const item = orderForm.items[info.itemIndex]\n if (!item) continue\n\n for (const sla of info.slas) {\n const key = sla.name\n\n if (!groupShipping[key]) {\n groupShipping[key] = {\n shipping_tier: sla.name,\n delivery_time: parseInt(sla.shippingEstimate),\n shipping: parseFloat((sla.price / 100).toFixed(1)),\n line_items: []\n }\n }\n\n groupShipping[key].line_items.push(item.id)\n }\n }\n\n const shippings = Object.values(groupShipping).map((s) => ({\n shipping: s.shipping,\n shipping_tier: s.shipping_tier,\n delivery_time: s.delivery_time,\n line_items: s.line_items.join(',')\n }))\n\n return shippings || null\n },\n\n shipping: (context: EventContext, eventName: EventName) => {\n const logistics = context?.orderForm?.shippingData?.logisticsInfo ?? []\n return logistics.reduce((total: number, item: any) => {\n const selected = item.slas?.find((sla: any) => sla.id === item.selectedSla)\n return total + (selected?.price ?? 0)\n }, 0)\n },\n\n shipping_tier: (context: EventContext, eventName: EventName) => {\n const logistics = context?.orderForm?.shippingData?.logisticsInfo ?? []\n const selectedSlas = logistics\n .map((item: {\n selectedSla?: string,\n slas?: Array<{\n id: string,\n deliveryChannel: string,\n name?: string,\n pickupStoreInfo?: { friendlyName?: string }\n }>\n }) => {\n if (!item.selectedSla) return null;\n return item.slas?.find((sla) => sla.id === item.selectedSla) || null;\n })\n .filter(Boolean) as Array<{\n deliveryChannel: string,\n name?: string,\n pickupStoreInfo?: { friendlyName?: string }\n }>;\n\n if (selectedSlas.length === 0) return null;\n\n const uniqueTiers = Array.from(\n new Map(\n selectedSlas.map((sla) => {\n const key = sla.deliveryChannel === 'pickup-in-point'\n ? `pickup:${sla.pickupStoreInfo?.friendlyName || sla.name || ''}`\n : `delivery:${sla.name || ''}`;\n return [key, sla];\n })\n ).values()\n );\n\n const sortedTiers = uniqueTiers.sort((a, b) => {\n const aOrder = a.deliveryChannel === 'pickup-in-point' ? 0 : 1;\n const bOrder = b.deliveryChannel === 'pickup-in-point' ? 0 : 1;\n if (aOrder !== bOrder) return aOrder - bOrder;\n\n const aLabel = a.deliveryChannel === 'pickup-in-point'\n ? (a.pickupStoreInfo?.friendlyName || a.name || '')\n : (a.name || '');\n const bLabel = b.deliveryChannel === 'pickup-in-point'\n ? (b.pickupStoreInfo?.friendlyName || b.name || '')\n : (b.name || '');\n\n return aLabel.localeCompare(bLabel, 'pt-BR');\n });\n\n const shippingTier = sortedTiers\n .map((sla) => (\n sla.deliveryChannel === 'pickup-in-point'\n ? `retirada em loja${sla.pickupStoreInfo?.friendlyName ? `: ${sla.pickupStoreInfo.friendlyName}` : ''}`\n : sla.deliveryChannel === 'delivery'\n ? `receba em casa${sla.name ? `: ${sla.name}` : ''}`\n : null\n ))\n .filter(Boolean)\n .join(', ');\n\n return shippingTier || null;\n },\n\n transaction_id: (context: EventContext, eventName: EventName) => {\n return context.orderForm?.orderGroup?.toString() || null;\n },\n\n available_grid: (context: EventContext, eventName: EventName) => {\n return context.availableGrid || null;\n },\n\n method: (context: EventContext, eventName: EventName) => {\n return context.method || null;\n },\n\n type: (context: EventContext, eventName: EventName) => {\n return context.type || null;\n },\n}","import { getUserInfo } from \"../../userInfo\";\nimport type { EventContext, InitialConfig } from \"@src/types\";\nimport type {\n MetaRegionContext,\n MetaPromotionNameContext,\n MetaCreativeSlotContext,\n MetaCreativeNameContext,\n MetaContentTypeContext,\n MetaSlotPerLineContext,\n MetaSearchTermContext,\n MetaSearchFoundContext,\n MetaSearchQuantityContext,\n MetaColorContext,\n MetaPriceRangeContext,\n MetaSizeContext,\n MetaOrderingContext,\n MetaCategoryContext,\n MetaItemRefContext,\n MetaMethodContext,\n MetaTypeContext,\n} from './types'\n\n\nexport const metaAdapters = {\n user_info: getUserInfo,\n\n content_type: (context: MetaContentTypeContext) => {\n return context.meta.content_type || null;\n },\n\n region: (context: MetaRegionContext) => {\n return context.meta.region || null;\n },\n\n pre_filled: (context: EventContext): boolean => {\n return !!context.preFilled;\n },\n\n currency: (_: EventContext, config: InitialConfig): string | null => {\n if (config?.currency) return config.currency\n return 'BRL'\n },\n\n slot_per_line: (context: MetaSlotPerLineContext): number | null => {\n return context.meta.slot_per_line ?? null;\n },\n\n search_term: (context: MetaSearchTermContext) => {\n return context.meta.search_term || null;\n },\n\n search_found: (context: MetaSearchFoundContext): boolean | null => {\n return context.meta.search_found || null\n },\n\n search_quantity: (context: MetaSearchQuantityContext): number | null => {\n return context.meta.search_quantity || 0;\n },\n\n promotion_name: (context: MetaPromotionNameContext) => {\n return context.meta.promotion_name || null;\n },\n\n creative_name: (context: MetaCreativeNameContext) => {\n return context.meta.creative_name || null;\n },\n\n creative_slot: (context: MetaCreativeSlotContext) => {\n return context.meta.creative_slot || null;\n },\n\n item_ref: (context: MetaItemRefContext) => {\n return context.meta.item_ref || null;\n },\n\n method: (context: MetaMethodContext) => {\n return context.meta.method || null;\n },\n\n type: (context: MetaTypeContext) => {\n return context.meta.type || null;\n },\n\n color: (context: MetaColorContext) => {\n return context.meta.color || null;\n },\n\n price_range: (context: MetaPriceRangeContext) => {\n return context.meta.price_range || null;\n },\n\n category: (context: MetaCategoryContext) => {\n return context.meta.category || null;\n },\n\n ordering: (context: MetaOrderingContext) => {\n return context.meta.ordering || null;\n },\n\n size: (context: MetaSizeContext) => {\n return context.meta.size || null;\n },\n}","export interface BrandItem {\n brand?: string;\n additionalInfo?: {\n brandName?: string;\n };\n}\n\n\nconst BRAND_CODES = {\n farm: 'farmrio',\n 'farm etc': 'farmetc',\n 'farm rio': 'farmrio',\n} as const;\n\n\ntype Standardized = keyof typeof BRAND_CODES\n\n/**\n * Extrai o código padronizado (ex: 'farmrio') de uma única string de marca.\n * Retorna null se não houver mapeamento.\n */\nfunction getBrandCode(brand: string | undefined): string | null {\n if (!brand) return null;\n const standardized = brand.toLowerCase().trim();\n return BRAND_CODES[standardized as Standardized] || null;\n}\n\n\n/**\n * Função principal que padroniza a marca ou lista de marcas para o formato final:\n * 'farmrio', 'farmetc', ou 'farmrio_farmetc'.\n */\n// export function normalizeBrand(input: string | BrandItem[] | BrandItem | string[] | undefined | null) {\nexport function normalizeBrand(input: any): string | null {\n let brandStrings = [];\n\n if (Array.isArray(input) && input.every(item => typeof item === 'string')) {\n brandStrings = input as string[];\n } else if (Array.isArray(input)) {\n // Se for um Array, coleta a string da marca de cada item.\n brandStrings = input.map(item => item.additionalInfo?.brandName || item.brand);\n } else if (typeof input === 'object' && input !== null && 'brand' in input) {\n // Se for um Objeto único, trata como um Array de um único item (para reuso de lógica).\n brandStrings = [(input as BrandItem).additionalInfo?.brandName || (input as BrandItem).brand];\n } else if (typeof input === 'string') {\n // Se for uma String (mal formatada ou não), trata diretamente.\n return getBrandCode(input);\n } else {\n // Se for undefined, null, ou outro tipo não esperado.\n return null;\n }\n\n const brandCodes = brandStrings\n .map(getBrandCode)\n .filter((code): code is string => code !== null); // ['farmrio', 'farmetc', 'farmrio']\n\n const uniqueSortedCodes = [...new Set(brandCodes)].sort(); // ['farmetc', 'farmrio']\n\n // Retorna a combinação ('farmrio', 'farmetc', ou 'farmrio_farmetc').\n return uniqueSortedCodes.length > 0 ? uniqueSortedCodes.join('_') : null;\n}","import { capitalize } from \"@core/utils\";\nimport type { ItemCategory } from '@src/types'\nimport type { Product } from \"./types\";\n\nexport const getItemCategory = (item: Product): ItemCategory => {\n const value = item?.category;\n if (!value) return \"Coleção\";\n\n const text = Array.isArray(value) ? value.join(\" \") : String(value);\n const match = text.match(/outlet|bazar|sale/i)?.[0].toLowerCase();\n return (match as ItemCategory) ?? \"Coleção\";\n};\n\nexport const getItemCategory2 = (item: Product): string => {\n const AVOID_CATEGORIES = /^(outlet|bazar|sale)$/i;\n const categories = item.category?.split(\">\") ?? [];\n const last = categories[categories.length - 1] ?? \"\";\n const validHierarchy = last\n .split(\"/\")\n .filter((c: string) => c && !AVOID_CATEGORIES.test(c));\n const deepest = validHierarchy[validHierarchy.length - 1] ?? \"\";\n return capitalize(deepest);\n};","import type { EventContext, InitialConfig, ItemsResponse } from '@src/types';\nimport { resizeVtexImage, sortSizes } from '@core/utils';\nimport { metaAdapters } from '@meta/index';\nimport { normalizeBrand } from '@src/core/farm';\nimport { getItemCategory, getItemCategory2 } from './utils';\nimport type {\n DecoAvailableGridContext,\n DecoBrandContext,\n DecoItemsContext,\n DecoLineItemsContext,\n DecoValueContext,\n PropertyValue,\n Product,\n} from \"./types\";\n\n\nconst IN_STOCK_SCHEMA = \"https://schema.org/InStock\";\nconst LIST_PRICE_SCHEMA = \"https://schema.org/ListPrice\"\n\nexport const decoAdapter = {\n ...metaAdapters, // global adapters\n\n items: (context: DecoItemsContext): ItemsResponse[] | null => {\n if (context?.items) return context.items\n\n if (context?.products) {\n return context.products.map((item: Product) => {\n const COLOR_REGEX = /^[^_]+_/ // do começo da string, captura tudo que não é underscore, até achar um underscore.\n const listPrice = item?.offers?.offers?.[0].priceSpecification.find((s) =>\n s.priceType === LIST_PRICE_SCHEMA\n )?.price\n\n return {\n quantity: 1,\n index: item?.index ?? 0,\n item_brand: item.brand?.name?.toLowerCase() ?? null,\n item_name: item.alternateName ?? null,\n price: item.offers?.lowPrice ?? null,\n discount: Math.round((Number(listPrice) - Number(item?.offers?.lowPrice)) * 100) / 100,\n item_variant: item?.name?.split(' - ')[0]?.replace(COLOR_REGEX, '').replace(/_/g, ' ') || null, // cor\n item_variant2: item?.name?.split(' - ')[1] ?? null, // tamanho\n item_shipping_tier: '',\n item_ref: item.additionalProperty?.find((i: PropertyValue) => i.name === \"RefId\")?.value?.replace(/_\\d+$/, \"\") ?? null,\n item_category: getItemCategory(item) ?? null,\n item_category2: getItemCategory2(item) ?? null,\n item_id: item?.inProductGroupWithID ?? null,\n item_sku: item.sku ?? null,\n item_url: item.url ?? null,\n image_url: resizeVtexImage(item?.image?.[0].url) ?? null,\n seller_id: item.offers?.offers?.[0]?.seller ?? null,\n item_list_name: item?.item_list_name ?? null,\n }\n })\n }\n\n return null\n },\n\n brand: (context: DecoBrandContext, config: InitialConfig) => {\n if (config?.brand) return config.brand\n if (context?.brand) return context.brand\n if (context?.products) {\n return normalizeBrand(context.products.map((p) => p?.brand?.name))\n }\n return null\n },\n\n line_items: (context: DecoLineItemsContext): string[] | null => {\n if (context?.line_items) return context.line_items;\n\n if (context?.products) {\n return context.products\n .map((item: Product) => item?.inProductGroupWithID)\n .filter((id): id is string => Boolean(id))\n }\n\n return null;\n },\n\n value: (context: DecoValueContext): number | null => {\n if (context?.value) return context.value\n\n if (context?.products) {\n return context.products\n .map((item: Product) => item.offers?.lowPrice)\n .filter((price): price is number => price !== undefined)\n .reduce((sum, price) => sum + price, 0)\n }\n\n return null\n },\n\n available_grid: (context: DecoAvailableGridContext): string | null => {\n if (context?.available_grid) return context.available_grid\n\n if (context?.products) {\n const sizes = context.products\n .flatMap((product: Product) =>\n product.isVariantOf?.hasVariant?.filter((variant) =>\n variant.offers?.offers?.some((o) => o.availability === IN_STOCK_SCHEMA)\n )\n .map((variant) => variant.name?.split(' - ')[1])\n .filter((name): name is string => Boolean(name)) ?? []\n )\n const result = sortSizes(sizes).join(\",\").trim()\n\n return result || null\n }\n\n return null;\n },\n}","import { ItemCategory } from \"../../../types\";\nimport { Product } from \"./types\";\n\n// adapter IS util functions\nexport const getItemCategory = (item: Product) => {\n const keywords = [\"outlet\", \"bazar\", \"sale\"];\n const regex = new RegExp(keywords.join(\"|\"), \"i\"); // cria: /outlet|bazar|sale/i\n\n const value = item?.categories\n\n if (value) {\n const textToTest = Array.isArray(value) ? value.join(\" \") : String(value);\n const match = textToTest.match(regex);\n\n if (match) {\n return match[0].toLowerCase() as ItemCategory;\n }\n }\n return \"Coleção\";\n}\n\nexport const getItemCategory2 = (item: Product): string => {\n const avoidList = /outlet|bazar|sale/i;\n const lastCategory = item.categories?.[item.categories.length - 1] ?? \"\";\n const categoryHierarchy = lastCategory.split(\"/\").filter(Boolean);\n const deepestCategory = [...categoryHierarchy].reverse().find(c => !avoidList.test(c)) ?? \"\";\n return deepestCategory && deepestCategory[0].toUpperCase() + deepestCategory.slice(1).toLowerCase();\n};","import { resizeVtexImage } from '@core/utils';\nimport type { InitialConfig, ItemsResponse } from '@src/types'\nimport { getItemCategory, getItemCategory2 } from '../utils'\nimport type { \n HeadlessValuePDPContext,\n HeadlessItemsPDPContext,\n HeadlessBrandPDPContext,\n HeadlessLineItemsPDPContext,\n} from \"../types\";\n\nexport const HeadlessPdpZone = {\n items: (context: HeadlessItemsPDPContext): ItemsResponse[] | null => {\n if (context?.items) return context.items\n\n if (context?.products) {\n return context.products.map((item) => {\n const listPrice = item?.items[0].sellers?.[0].commertialOffer.ListPrice\n const price = item?.items[0].sellers?.[0].commertialOffer.Price\n\n return {\n quantity: 1,\n index: item?.index ?? null,\n item_brand: item.brand ?? null,\n item_name: item.productName ?? null,\n price: price ?? null,\n item_shipping_tier: null,\n discount: Number(listPrice) - Number(price),\n item_variant: item.items[0]?.name?.split(\" - \")[0] ?? null,\n item_variant2: item.items[0]?.name?.split(\" - \")[1] ?? null,\n item_ref: item.productReference ?? null, // sem ref no retorno do IS na multi-lib produtos PDC\n item_category: getItemCategory(item),\n item_category2: getItemCategory2(item) ?? null,\n item_id: item?.productId ?? null,\n item_sku: item.items?.[0].itemId ?? null,\n item_url: item.link ?? null, // sem link/url no retorno do IS na multi-lib produtos PDC\n image_url: resizeVtexImage(item?.items?.[0].images?.[0].imageUrl) ?? null,\n seller_id: item.items?.[0]?.sellers?.[0].sellerId ?? null,\n item_list_name: item.item_list_name ?? null,\n }\n })\n }\n\n return null;\n },\n\n value: (context: HeadlessValuePDPContext): number | null => {\n if (context?.value) return context.value\n\n if (context?.products) {\n return context.products\n .map((item) => item?.items[0].sellers?.[0].commertialOffer.Price)\n .filter((price): price is number => price !== undefined)\n .reduce((sum, price) => sum + price, 0)\n }\n\n return null\n },\n\n line_items: (context: HeadlessLineItemsPDPContext): string[] | null => {\n if (context?.line_items) return context.line_items;\n\n if (context?.products) {\n return context.products\n .map((item) => item.productId)\n .filter((id): id is string => Boolean(id))\n }\n\n return null;\n },\n\n brand: (context: HeadlessBrandPDPContext, config: InitialConfig): string | null => {\n if (config?.brand) return config.brand\n if (context?.brand) return context.brand\n if (context?.products) {\n return context.products.map((p) => p.brand).join().trim()\n }\n\n return null\n },\n}","import type { InitialConfig, ItemsResponse } from \"@src/types\";\nimport { resizeVtexImage } from \"@core/utils\";\nimport { getItemCategory, getItemCategory2 } from '../utils'\nimport type {\n HeadlessBrandContext,\n HeadlessItemsPDCContext,\n HeadlessLineItemsPDCContext,\n HeadlessValuePDCContext,\n} from \"../types\"\n\nexport const HeadlessPdcZone = {\n items: (context: HeadlessItemsPDCContext): ItemsResponse[] | null => {\n if (context?.items) return context.items\n\n if (context?.products) {\n return context.products.map((item) => {\n const listPrice = item.offers.highPrice\n const price = item.offers.lowPrice\n\n return {\n quantity: 1,\n index: item?.index ?? 0,\n item_brand: item.brand.name ?? null,\n item_name: item.name ?? null,\n price: price ?? null,\n item_shipping_tier: null,\n discount: Number(listPrice) - Number(price),\n item_variant: item.isVariantOf?.hasVariant?.[0].name.split(\" - \")[0] ?? null,\n item_variant2: (item.additionalProperty ?? []).find((p) => p.name === 'Tamanho')?.value as string ?? null,\n item_ref: null, // sem ref no retorno do IS na multi-lib produtos PDC\n item_category: getItemCategory(item),\n item_category2: getItemCategory2(item) ?? null,\n item_id: item.isVariantOf.productGroupID ?? null,\n item_sku: item.sku ?? null,\n item_url: null, // sem link/url no retorno do IS na multi-lib produtos PDC\n image_url: resizeVtexImage(item?.image?.[0].url) ?? null,\n seller_id: item.offers?.offers?.find(o => o.availability)?.seller?.identifier ?? null,\n item_list_name: item.item_list_name ?? null,\n }\n })\n }\n\n return null;\n },\n\n value: (context: HeadlessValuePDCContext): number | null => {\n if (context?.value) return context.value\n\n if (context?.products) {\n return context.products\n .map((item) => item.offers.lowPrice)\n .filter((price): price is number => price !== undefined)\n .reduce((sum, price) => sum + price, 0)\n }\n\n return null\n },\n\n line_items: (context: HeadlessLineItemsPDCContext): string[] | null => {\n if (context?.line_items) return context.line_items;\n\n if (context?.products) {\n return context.products\n .map((item) => item.id)\n .filter((id): id is string => Boolean(id))\n }\n\n return null;\n },\n\n brand: (context: HeadlessBrandContext, config: InitialConfig): string | null => {\n if (config?.brand) return config.brand\n if (context?.brand) return context.brand\n if (context?.products) {\n return context.products.map((p) => p.brand.name).join().trim()\n }\n\n return null\n },\n}","import { sortSizes } from \"@core/utils\";\nimport { metaAdapters } from \"@meta/index\"\nimport type { EventContext, InitialConfig } from \"@src/types\";\n\nimport { HeadlessPdpZone } from \"./zones/PDP\"\nimport { HeadlessPdcZone } from \"./zones/PDC\"\nimport type {\n HeadlessItemsPDCContext,\n HeadlessBrandPDCContext,\n HeadlessLineItemsPDCContext,\n HeadlessBrandContext,\n HeadlessLineItemsContext,\n HeadlessValueContext,\n HeadlessAvailableGridContext,\n HeadlessItemsContext,\n HeadlessItemsPDPContext, \n HeadlessLineItemsPDPContext,\n} from \"./types\"\n\nexport const headlessAdapter = {\n ...metaAdapters, // global adapters\n\n brand: (context: HeadlessBrandContext, config: InitialConfig) => {\n if (context.zone === 'PDP') {\n return HeadlessPdpZone.brand(context as HeadlessLineItemsPDPContext, config)\n }\n\n if (context.zone === 'PDC') {\n return HeadlessPdcZone.brand(context as HeadlessBrandPDCContext, config)\n }\n\n return null\n },\n\n line_items: (context: HeadlessLineItemsContext): string[] | null => {\n if (context.zone === 'PDP') {\n return HeadlessPdpZone.line_items(context as HeadlessLineItemsPDPContext)\n }\n\n if (context.zone === 'PDC') {\n return HeadlessPdcZone.line_items(context as HeadlessLineItemsPDCContext)\n }\n\n return null\n },\n\n value: (context: HeadlessValueContext): number | null => {\n if (context.zone === 'PDP') {\n return HeadlessPdpZone.value(context as HeadlessItemsPDPContext)\n }\n\n if (context.zone === 'PDC') {\n return HeadlessPdcZone.value(context as HeadlessItemsPDCContext)\n }\n\n return null;\n },\n\n items: (context: HeadlessItemsContext) => {\n if (context.zone === 'PDP') {\n return HeadlessPdpZone.items(context as HeadlessItemsPDPContext)\n }\n\n if (context.zone === 'PDC') {\n return HeadlessPdcZone.items(context as HeadlessItemsPDCContext)\n }\n },\n\n // param used only in one Zone, the PDP; no need condition\n available_grid: (context: HeadlessAvailableGridContext): string | null => {\n if (context?.available_grid) return context.available_grid\n\n if (context?.products) {\n const sizes = context.products.flatMap(p => p.items.map(i => i.Tamanho[0]))\n const result = sortSizes(sizes).join(',')\n return result || null\n }\n\n return null;\n },\n}\n","import { SelectedDeliveryChannel, Sla } from \"./types\";\n\nexport const getShippingTier = (sla: Sla): string => {\n const isPickup = sla.deliveryChannel === SelectedDeliveryChannel.PickupInPoint;\n\n if (isPickup) {\n const storeName = sla.pickupStoreInfo?.friendlyName?.trim();\n return storeName\n ? `retirada em loja: ${storeName}`\n : \"retirada em loja\";\n }\n\n return sla.name\n ? `receba em casa: ${sla.name.toLowerCase()}`\n : \"receba em casa\";\n}\n\n\nexport const getDeliveryTime = (sla: Sla): number => {\n const estimate = sla.shippingEstimate;\n if (!estimate) return 0;\n\n const days = parseInt(estimate, 10);\n return isNaN(days) ? 0 : days;\n}","import type { InitialConfig, ShippingsResponse } from \"@src/types\";\nimport type { MetaZipCodeContext } from \"@meta/types\";\nimport { metaAdapters } from \"@meta/index\"\nimport { getShippingTier, getDeliveryTime } from \"./utils\";\nimport type { PickupFlagPickupContext, PickupShippingsContext, PickupBrandContext } from \"./types\";\n\nexport const pickupAdapter = {\n\n ...metaAdapters,\n\n flag_pickup: (context: PickupFlagPickupContext): boolean | null => {\n return context?.flag_pickup ?? null;\n },\n\n shippings: (context: PickupShippingsContext): ShippingsResponse[] | null => {\n if (context.shippings) {\n return context.shippings.map((s) => ({\n line_items: s.line_items ?? '',\n shipping: s.price / 100,\n shipping_tier: getShippingTier(s),\n delivery_time: getDeliveryTime(s),\n }))\n }\n\n return null;\n },\n\n brand: (context: PickupBrandContext, config: InitialConfig): string | null => {\n if (config?.brand) return config.brand\n if (context?.brand) return context.brand\n\n return null\n },\n\n zipcode: (context: MetaZipCodeContext) => {\n return context.meta.zipcode ?? null;\n },\n}","import { capitalize } from '../../../core/utils';\nimport type { ItemCategory } from '../../../types'\nimport type { OrderFormItem, OrderForm, LogisticsInfo } from \"./types\";\n\nexport const getItemCategory = (item: OrderFormItem): ItemCategory => {\n const categories = item?.productCategories;\n if (!categories) return \"Coleção\";\n\n // Junta todos os valores das categorias em uma string\n const text = Object.values(categories).join(\" \");\n const match = text.match(/outlet|bazar|sale/i)?.[0].toLowerCase();\n\n return (match as ItemCategory) ?? \"Coleção\";\n};\n\nexport const getItemCategory2 = (item: OrderFormItem): string => {\n const AVOID_CATEGORIES = /outlet|bazar|sale/i;\n const categories = Object.values(item?.productCategories ?? {});\n const validHierarchy = categories\n .map(c => c.trim())\n .filter(c => c && !AVOID_CATEGORIES.test(c));\n\n const deepest = validHierarchy[validHierarchy.length - 1] ?? \"\";\n return capitalize(deepest);\n};\n\n\n// Tipo de envio do pedido por item. Exemplos: “retirada em loja” e “receba em casa”. Caso tenha disponível a informação da loja de retirada ou o modelo de entrega em casa (normal, rápida, expresso…) colocar com “:” na frente como detalhamento, exemplo “retirada em loja: FARM SHOPPING LEBLON” ou “Receba em casa: expresso”.\nexport function getItemShippingTier(orderForm: OrderForm | undefined, item: OrderFormItem) {\n const info = orderForm?.shippingData?.logisticsInfo?.find(\n (li: LogisticsInfo) => li.itemId === item.id\n );\n\n const selectedSla = info?.slas?.find((sla) => sla.id === info.selectedSla);\n return selectedSla?.pickupStoreInfo?.friendlyName\n ? `retirada em loja: ${selectedSla.pickupStoreInfo.friendlyName}`\n : selectedSla?.name\n ? `Receba em casa: ${selectedSla.name}`\n : null;\n}\n\nexport const getOrderFormItems = (orderForm: OrderForm): OrderFormItem[] => {\n const idSelected = orderForm?.selected;\n return idSelected\n ? orderForm.items.filter((item: OrderFormItem) => item.id === idSelected)\n : orderForm.items;\n};\n","import { metaAdapters } from \"@meta/index\";\nimport { MetaZipCodeContext } from \"@meta/types\";\nimport { getPaymentType } from \"../../legacy/paymentType\";\nimport { resizeVtexImage } from \"@core/utils\";\nimport { getItemCategory, getItemCategory2, getOrderFormItems, getItemShippingTier } from './utils'\nimport { normalizeBrand } from \"@core/farm\";\nimport type { EventContext, InitialConfig, ItemsResponse, ShippingsResponse } from \"@src/types\";\nimport type {\n OFBrandContext,\n OFFlagPickupContext,\n OFItemsContext,\n OFLineItemsContext,\n OFShippingsContext,\n OFTotalDiscountContext,\n OFValueContext,\n OrderFormItem,\n} from \"./types\";\n\nexport const orderFormAdapter = {\n ...metaAdapters,\n\n items: (context: OFItemsContext): ItemsResponse[] | null => {\n if (context?.items) return context.items\n\n if (context?.orderForm && context?.orderForm.items) {\n return getOrderFormItems(context.orderForm).map((item: OrderFormItem, index) => {\n return {\n quantity: item?.quantity ?? 1,\n index: context?.orderForm?.index ?? index ?? null,\n item_brand: item.additionalInfo?.brandName ?? null,\n item_name: item?.name.replace(item?.skuName, '').trim() ?? null,\n price: item?.price / 100,\n discount: (item?.listPrice - item?.sellingPrice) / 100,\n item_variant: item?.skuName?.split(' - ')[0]?.split('_').pop()?.trim() ?? null,\n item_variant2: item?.skuName?.split(' - ')[1]?.trim() ?? null,\n item_shipping_tier: getItemShippingTier(context.orderForm, item),\n item_ref: item?.productRefId || item?.refId.replace(/_\\d+$/, \"\") || null,\n item_category: getItemCategory(item) ?? null,\n item_category2: getItemCategory2(item) ?? null,\n item_id: item?.productId ?? null,\n item_sku: item?.id ?? null,\n item_url: item.detailUrl ?? null,\n image_url: resizeVtexImage(item.imageUrl) ?? null,\n seller_id: item?.seller ?? null,\n item_list_name: context?.orderForm?.item_list_name ?? null,\n }\n })\n }\n\n return null\n },\n\n brand: (context: OFBrandContext, config: InitialConfig): string | null => {\n if (config?.brand) return config.brand\n if (context?.brand) return context.brand\n\n if (!context?.orderForm?.items) return null;\n\n const brands = getOrderFormItems(context.orderForm).map(item => item.additionalInfo.brandName);\n return normalizeBrand(brands)\n },\n\n line_items: (context: OFLineItemsContext): string[] | null => {\n if (context?.line_items) return context.line_items;\n if (!context?.orderForm?.items) return null;\n\n return getOrderFormItems(context.orderForm)\n .map((item) => item?.productId)\n .filter((id): id is string => Boolean(id));\n },\n\n value: (context: OFValueContext): number | null => {\n if (context?.value) return context.value;\n if (!context?.orderForm?.items) return null;\n\n return getOrderFormItems(context.orderForm)\n .map((item) => (item?.price / 100) * item.quantity)\n .filter((price): price is number => price !== undefined)\n .reduce((sum, price) => sum + price, 0);\n },\n\n payment_type: getPaymentType,\n\n total_discount: (context: OFTotalDiscountContext): number | null => {\n if (context?.total_discount) return context.total_discount\n if (!context?.orderForm?.items) return null;\n\n const totalsList = context.orderForm?.totalizers || []; // totals for ordergroup and orderform have different names\n const totalDiscount = getOrderFormItems(context.orderForm).reduce((acc, item) => {\n const unitDiscount = Math.max(0, item.listPrice - item.sellingPrice);\n return acc + (unitDiscount * item.quantity);\n }, 0);\n\n const discounts = totalsList.find((t) => t.id === 'Discounts');\n return Math.abs((discounts?.value || 0) + totalDiscount) / 100 || null;\n },\n\n subtotal: (context: EventContext) => {\n const totalsList = context.orderForm?.totalizers || context.orderForm?.totals || []; // totals for ordergroup and orderform have different names\n\n const subtotal =\n totalsList\n .filter((t: EventContext) => t.id === 'Items')\n .reduce((acc: number, t: EventContext) => acc + (t.value || 0), 0) / 100 || 0;\n\n return subtotal\n },\n\n coupon_message: (context: EventContext) => {\n if (context.couponMessage) return context.couponMessage;\n\n const messages = context.orderForm?.messages || [];\n\n if (messages.length === 0) return null;\n\n const couponMessages = messages.filter((msg: EventContext) =>\n msg.text.toLowerCase().includes('cupom')\n );\n\n if (couponMessages.length === 0) return null;\n\n return couponMessages.map((msg: EventContext) => msg.text).join(' | ');\n },\n\n zipcode: (context: MetaZipCodeContext) => {\n return context.meta.zipcode ?? null;\n },\n\n flag_pickup: (context: OFFlagPickupContext): boolean | null => {\n const orderForm = context.orderForm;\n if (!orderForm) return null;\n\n const logisticsInfo = orderForm.shippingData?.logisticsInfo || [];\n const hasPickup = logisticsInfo.some((info) =>\n info.slas?.some((sla) => sla.deliveryChannel === 'pickup-in-point')\n );\n\n return hasPickup\n },\n\n shippings: (context: OFShippingsContext): ShippingsResponse[] | null => {\n if (!context.orderForm) return null;\n const { items, shippingData } = context.orderForm;\n const acc: Record<string, any> = {};\n\n shippingData.logisticsInfo.forEach(({ itemIndex, slas }) => {\n const item = items[itemIndex];\n if (!item) return;\n slas.forEach((sla) => {\n if (!acc[sla.name]) acc[sla.name] = {\n shipping_tier: sla.name,\n delivery_time: parseInt(sla.shippingEstimate),\n shipping: parseFloat((sla.price / 100).toFixed(1)),\n line_items: []\n };\n acc[sla.name].line_items.push(item.id);\n });\n });\n\n return Object.values(acc).map(s => ({ ...s, line_items: s.line_items.join(',') }));\n },\n\n shipping: (context: EventContext) => {\n const logistics = context?.orderForm?.shippingData?.logisticsInfo ?? []\n return logistics.reduce((total: number, item: any) => {\n const selected = item.slas?.find((sla: any) => sla.id === item.selectedSla)\n return total + (selected?.price ?? 0)\n }, 0)\n },\n\n shipping_tier: (context: EventContext) => {\n const logistics = context?.orderForm?.shippingData?.logisticsInfo ?? []\n const selectedSlas = logistics\n .map((item: {\n selectedSla?: string,\n slas?: Array<{\n id: string,\n deliveryChannel: string,\n name?: string,\n pickupStoreInfo?: { friendlyName?: string }\n }>\n }) => {\n if (!item.selectedSla) return null;\n return item.slas?.find((sla) => sla.id === item.selectedSla) || null;\n })\n .filter(Boolean) as Array<{\n deliveryChannel: string,\n name?: string,\n pickupStoreInfo?: { friendlyName?: string }\n }>;\n\n if (selectedSlas.length === 0) return null;\n\n const uniqueTiers = Array.from(\n new Map(\n selectedSlas.map((sla) => {\n const key = sla.deliveryChannel === 'pickup-in-point'\n ? `pickup:${sla.pickupStoreInfo?.friendlyName || sla.name || ''}`\n : `delivery:${sla.name || ''}`;\n return [key, sla];\n })\n ).values()\n );\n\n const sortedTiers = uniqueTiers.sort((a, b) => {\n const aOrder = a.deliveryChannel === 'pickup-in-point' ? 0 : 1;\n const bOrder = b.deliveryChannel === 'pickup-in-point' ? 0 : 1;\n if (aOrder !== bOrder) return aOrder - bOrder;\n\n const aLabel = a.deliveryChannel === 'pickup-in-point'\n ? (a.pickupStoreInfo?.friendlyName || a.name || '')\n : (a.name || '');\n const bLabel = b.deliveryChannel === 'pickup-in-point'\n ? (b.pickupStoreInfo?.friendlyName || b.name || '')\n : (b.name || '');\n\n return aLabel.localeCompare(bLabel, 'pt-BR');\n });\n\n const shippingTier = sortedTiers\n .map((sla) => (\n sla.deliveryChannel === 'pickup-in-point'\n ? `retirada em loja${sla.pickupStoreInfo?.friendlyName ? `: ${sla.pickupStoreInfo.friendlyName}` : ''}`\n : sla.deliveryChannel === 'delivery'\n ? `receba em casa${sla.name ? `: ${sla.name}` : ''}`\n : null\n ))\n .filter(Boolean)\n .join(', ');\n\n return shippingTier || null;\n },\n\n transaction_id: (context: EventContext) => {\n return context.orderForm?.orderGroup?.toString() || null;\n },\n\n coupon: (context: EventContext) => {\n return context.appliedCoupon || context?.orderForm?.marketingData?.coupon || null;\n },\n\n seller_cod_name: (context: EventContext) => {\n return context.appliedSellerCodName || context?.orderForm.marketingData.utmiCampaign || null;\n },\n};","import { EVENTS } from './core/constants';\nimport { legacyGetters } from './params/legacy';\nimport { decoAdapter } from './params/adapters/deco';\nimport { headlessAdapter } from './params/adapters/headless';\nimport { pickupAdapter } from './params/adapters/pickup';\nimport { orderFormAdapter } from './params/adapters/orderForm';\nimport type { EventName, EventContext, AdapterPayload, InitialConfig } from './types';\n\ntype GetterFn = (context: EventContext, config: InitialConfig) => unknown\ntype EventRequiredParams = { requiredParams: string[] } | undefined;\n\nconst adapters = {\n DECO: decoAdapter,\n HEADLESS: headlessAdapter,\n PICKUP: pickupAdapter,\n ORDERFORM: orderFormAdapter,\n} as const;\n\ntype AdapterKey = keyof typeof adapters\n\nexport async function getParameters(\n context: AdapterPayload,\n eventName: EventName,\n config: InitialConfig\n) {\n const eventConfig = EVENTS[eventName] as EventRequiredParams;\n if (!eventConfig) return;\n\n const currentAdapter = context.adapter;\n const getters = adapters[currentAdapter as AdapterKey] ?? legacyGetters // fallback for legacy;\n\n const entries = await Promise.all(\n eventConfig.requiredParams.map(async (param) => {\n const getter = getters[param as keyof typeof getters] as GetterFn;\n\n if (typeof getter !== 'function') {\n console.error(`[DT] Missing getter \"${param}\" for adapter \"${currentAdapter}\"`);\n return [param, null] as const;\n }\n\n return [param, await getter(context, config)] as const;\n })\n );\n\n return Object.fromEntries(entries);\n}"],"mappings":"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","names":["_a","_a","document","resizeVtexImage","document","hashedDocument","_a","_b","config","BRAND_CODES","getBrandCode","normalizeBrand","_a","getItemCategory","getItemCategory2","getItemCategory","getItemCategory2","resizeVtexImage","config","normalizeBrand","_a","_b","getItemCategory","getItemCategory2","getItemCategory","getItemCategory2","resizeVtexImage","config","getItemCategory","getItemCategory2","resizeVtexImage","config","config","config","getItemCategory","getItemCategory2","getItemShippingTier","getItemShippingTier","getItemCategory","getItemCategory2","resizeVtexImage","config","normalizeBrand","_a","_b","config"]}
|