{"version":3,"file":"BNo8Ppq9.js","sources":["../../../../src/composables/banner/types.ts","../../../../src/composables/banner/resolver/channelLocationResolver/ruleResolvers.ts","../../../../src/composables/banner/resolver/channelLocationResolver/resolver.ts","../../../../src/composables/banner/resolver/channelConditionResolver/ruleResolvers.ts","../../../../src/composables/banner/resolver/channelConditionResolver/resolver.ts","../../../../src/composables/banner/resolver/resolveAssignment.ts","../../../../src/composables/banner/useAssignedBanners.ts","../../../../src/components/banner/bannerPosition.vue"],"sourcesContent":["export enum LocationRuleType {\n Global = 'global',\n Pages = 'page',\n ExcludedPages = 'excludedPage',\n LogicGroup = 'logicGroup',\n}\n\nexport enum LogicOperator {\n And = 'and',\n Or = 'or',\n}\n\nexport enum ConditionRuleType {\n LOGIN_STATUS = 'loginStatus',\n LOGIC_GROUP = 'logicGroup',\n PDP_MANUFACTURER = 'pdpManufacturer',\n}\n","import type { LogicGroupLocationRule } from '~/server/transformers/banner/transformer/assignments/locationRules/logicGroup';\nimport { LocationRuleType, LogicOperator } from '../../types';\nimport type { AssignmentResolverOptions } from '../resolveAssignment';\nimport { resolveLocationRule } from './resolver';\nimport type { PagesLocationRule } from '~/server/transformers/banner/transformer/assignments/locationRules/pages';\nimport type { ExcludedPagesLocationRule } from '~/server/transformers/banner/transformer/assignments/locationRules/excludedPages';\n\nexport const locationRuleResolvers: Record<\n LocationRuleType,\n (rule: any, options?: AssignmentResolverOptions) => boolean\n> = {\n [LocationRuleType.LogicGroup]: resolveLogicGroup,\n [LocationRuleType.Global]: resolveGlobalrule,\n [LocationRuleType.Pages]: resolvePagesRule,\n [LocationRuleType.ExcludedPages]: resolveExcludePages,\n};\n\nfunction resolveLogicGroup(\n rule: LogicGroupLocationRule,\n options?: AssignmentResolverOptions,\n): boolean {\n const { operator, rules } = rule;\n if (operator === LogicOperator.And) {\n return rules.every((cur) => resolveLocationRule(cur, options));\n } else {\n return rules.some((cur) => resolveLocationRule(cur, options));\n }\n}\nfunction resolveGlobalrule(): boolean {\n return true;\n}\nfunction resolvePagesRule(\n rule: PagesLocationRule,\n options?: AssignmentResolverOptions,\n): boolean {\n const matches = resolveUriMatches(options.uri, rule.pageUri);\n return matches;\n}\nfunction resolveExcludePages(\n rule: ExcludedPagesLocationRule,\n options?: AssignmentResolverOptions,\n): boolean {\n const matches = resolveUriMatches(options.uri, rule.pageUri);\n return !matches;\n}\n\nfunction resolveUriMatches(uri: string, pattern: string) {\n const patternParts = pattern.split('/');\n const uriParts = uri.split('/');\n let matches = true;\n let patternPart;\n for (let i = 0; i < uriParts.length; i++) {\n patternPart = patternParts[i];\n if (!patternPart) {\n if (patternParts[i - 1] !== '$...') matches = false;\n break;\n }\n if (patternPart === '$*' || patternPart === '$...') {\n continue;\n }\n if (patternPart !== uriParts[i]) {\n matches = false;\n break;\n }\n }\n\n return matches;\n}\n","import type { BannerAssignment } from '~/server/transformers/banner/transformer/assignments/bannerAssignmentTransformer';\nimport type { AssignmentResolverOptions } from '../resolveAssignment';\nimport { locationRuleResolvers } from './ruleResolvers';\nimport type { BaseLocationRule } from '~/server/transformers/banner/transformer/assignments/transformLocationRule';\n\nexport function resolveChannelLocation(\n channel: BannerAssignment,\n options: AssignmentResolverOptions,\n) {\n return resolveLocationRule(channel.locationRule, options);\n}\n\nexport function resolveLocationRule(\n rule: BaseLocationRule,\n options: AssignmentResolverOptions,\n): boolean | undefined {\n const resolver = locationRuleResolvers[rule.typeHandle];\n if (resolver) {\n return resolver(rule, options);\n }\n}\n","import { resolveConditionRule } from './resolver';\nimport type { AssignmentResolverOptions } from '../resolveAssignment';\nimport type { LogicGroupConditionRule } from '~/server/transformers/banner/transformer/assignments/conditionRules/logicGroup';\nimport type { LoginStatusConditionRule } from '~/server/transformers/banner/transformer/assignments/conditionRules/loginStatus';\nimport { ConditionRuleType, LogicOperator } from '../../types';\nimport type { PDPManufacturerConditionRule } from '~/server/transformers/banner/transformer/assignments/conditionRules/pdpManufacturer';\nimport type { Product } from '~/server/transformers/shop/product/types';\n\nexport const conditionRuleResolvers: Record<\n ConditionRuleType,\n (rule: any, options?: AssignmentResolverOptions) => boolean\n> = {\n [ConditionRuleType.LOGIC_GROUP]: resolveLogicGroup,\n [ConditionRuleType.LOGIN_STATUS]: resolveLoginStatus,\n [ConditionRuleType.PDP_MANUFACTURER]: resolvePDPManufacturerStatus,\n};\n\nfunction resolveLogicGroup(\n rule: LogicGroupConditionRule,\n options: AssignmentResolverOptions,\n): boolean {\n const { operator, rules } = rule;\n if (operator === LogicOperator.And) {\n return rules.every((cur) => resolveConditionRule(cur, options));\n } else {\n return rules.some((cur) => resolveConditionRule(cur, options));\n }\n}\n\nfunction resolveLoginStatus(\n rule: LoginStatusConditionRule,\n options: AssignmentResolverOptions,\n): boolean {\n return (\n (rule.login && options.isLoggedIn) || (!rule.login && !options.isLoggedIn)\n );\n}\n\nfunction resolvePDPManufacturerStatus(\n rule: PDPManufacturerConditionRule,\n options: AssignmentResolverOptions,\n): boolean {\n const product: Product = options.data?.product;\n if (!product) return false;\n return rule.manufacturerIds.includes(product.manufacturer.id);\n}\n","import { conditionRuleResolvers } from './ruleResolvers';\nimport type { BannerAssignment } from '~/server/transformers/banner/transformer/assignments/bannerAssignmentTransformer';\nimport type { BaseConditionRule } from '~/server/transformers/banner/transformer/assignments/transformConditionRule';\nimport type { AssignmentResolverOptions } from '../resolveAssignment';\n\nexport function resolveChannelCondition(\n channel: BannerAssignment,\n options?: AssignmentResolverOptions,\n) {\n return channel.conditionRule\n ? resolveConditionRule(channel.conditionRule, options)\n : true;\n}\n\nexport function resolveConditionRule(\n rule: BaseConditionRule,\n options?: AssignmentResolverOptions,\n): boolean | undefined {\n const resolver = conditionRuleResolvers[rule.typeHandle];\n if (resolver) {\n return resolver(rule, options);\n }\n}\n","import type { BannerPositions } from '~/@types/bannerPositions';\nimport { resolveChannelLocation } from './channelLocationResolver/resolver';\nimport { resolveChannelCondition } from './channelConditionResolver/resolver';\nimport type { BaseBannerData } from '~/components/banner/types';\nimport type { BannerAssignment } from '~/server/transformers/banner/transformer/assignments/bannerAssignmentTransformer';\n\nexport interface AssignmentResolverOptions {\n uri: string;\n isLoggedIn: boolean;\n data?: Record;\n}\n\nexport interface ResolvedBannerAssignment {\n bannerId: string | null;\n banner?: BaseBannerData;\n}\n\nexport function resolveBannerAssignment(\n channels: BannerAssignment[],\n channel: BannerPositions,\n options?: AssignmentResolverOptions,\n): ResolvedBannerAssignment[] {\n const viableChannels = channels\n .filter((cur) => {\n return (\n cur.position === channel &&\n resolveChannelLocation(cur, options) &&\n resolveChannelCondition(cur, options)\n );\n })\n .sort((a, b) => {\n return a.priority - b.priority;\n });\n\n //get assignment\n const regularChannels = viableChannels.filter((cur) => !cur.isFallback);\n if (regularChannels.length) {\n return regularChannels.map((cur) => {\n return {\n bannerId: cur.bannerId,\n banner: cur.banner,\n };\n });\n }\n\n //get fallback\n const fallbacks = viableChannels.filter((cur) => cur.isFallback);\n if (fallbacks.length) {\n return fallbacks.map((cur) => {\n return {\n bannerId: cur.bannerId,\n banner: cur.banner,\n };\n });\n }\n\n return [];\n}\n","import type { BannerPositions } from '~/@types/bannerPositions';\nimport { resolveBannerAssignment } from './resolver/resolveAssignment';\nimport { useSessionStore } from '~/stores/useSessionStore';\nimport { useBannerStore } from '~/stores/useBannerStore';\n\nexport async function useAssignedBanners(\n position: BannerPositions,\n data: Record = {},\n) {\n const router = useRouter();\n const bannerStore = useBannerStore();\n\n const assignments = await bannerStore.getBannerAssignments(position);\n\n const assignedBanners = ref([]);\n function setAssignedBanner() {\n const uri = router.currentRoute.value.path?.replace('/', '') ?? '';\n assignedBanners.value = resolveBannerAssignment(assignments, position, {\n uri: uri ? uri : 'startseite',\n isLoggedIn: useSessionStore().isLoggedIn,\n data,\n });\n }\n\n useNuxtApp().hook('page:loading:end', () => {\n setAssignedBanner();\n });\n\n setAssignedBanner();\n onMounted(() => {\n setAssignedBanner();\n });\n\n return { assignedBanners };\n}\n","\n\n"],"names":["LocationRuleType","LogicOperator","ConditionRuleType","locationRuleResolvers","resolveLogicGroup","resolveGlobalrule","resolvePagesRule","resolveExcludePages","rule","options","operator","rules","cur","resolveLocationRule","resolveUriMatches","uri","pattern","patternParts","uriParts","matches","patternPart","i","resolveChannelLocation","channel","resolver","conditionRuleResolvers","resolveLoginStatus","resolvePDPManufacturerStatus","resolveConditionRule","product","_a","resolveChannelCondition","resolveBannerAssignment","channels","viableChannels","a","b","regularChannels","fallbacks","useAssignedBanners","position","data","router","useRouter","assignments","useBannerStore","assignedBanners","ref","setAssignedBanner","useSessionStore","useNuxtApp","onMounted","props","__props","__temp","__restore","_withAsyncContext"],"mappings":"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"}