{"version":3,"sources":["webpack:///../../src/util/mergeData.ts"],"names":["pattern","styleList","styleProp","parseStyle","style","styleMap","s","split","key","val","trim","camelize","mergeData","mergeTarget","prop","i","arguments","length","Object","keys","mergeClasses","mergeStyles","undefined","mergeListeners","target","source","wrapInArray","concat","args","dest","arg","event"],"mappings":"gHAOA,wJAEA,MAAMA,EAAU,CACdC,UAAW,gBACXC,UAAW,SAGb,SAASC,EAAYC,GACnB,MAAMC,EAA4B,GAElC,IAAK,MAAMC,KAAKF,EAAMG,MAAMP,EAAQC,WAAY,CAC9C,IAAKO,EAAKC,GAAOH,EAAEC,MAAMP,EAAQE,WACjCM,EAAMA,EAAIE,OACLF,IAIc,kBAARC,IACTA,EAAMA,EAAIC,QAEZL,EAASM,eAASH,IAAQC,GAG5B,OAAOJ,EASK,SAAUO,IACtB,MAAMC,EAA2C,GACjD,IACIC,EADAC,EAAYC,UAAUC,OAI1B,MAAOF,IAGL,IAAKD,KAAQI,OAAOC,KAAKH,UAAUD,IACjC,OAAQD,GAEN,IAAK,QACL,IAAK,aACCE,UAAUD,GAAGD,KACfD,EAAYC,GAAQM,EAAaP,EAAYC,GAAOE,UAAUD,GAAGD,KAEnE,MACF,IAAK,QACCE,UAAUD,GAAGD,KACfD,EAAYC,GAAQO,EAAYR,EAAYC,GAAOE,UAAUD,GAAGD,KAElE,MAEF,IAAK,cACH,IAAKE,UAAUD,GAAGD,GAChB,WAEwBQ,IAAtBT,EAAYC,KACdD,EAAYC,GAAQ,IAElBD,EAAYC,KAEdD,EAAYC,IAAS,KAEvBD,EAAYC,IAASE,UAAUD,GAAGD,GAAMJ,OACxC,MAMF,IAAK,KACL,IAAK,WACCM,UAAUD,GAAGD,KACfD,EAAYC,GAAQS,EAAeV,EAAYC,GAAOE,UAAUD,GAAGD,KAErE,MAEF,IAAK,QACL,IAAK,QACL,IAAK,WACL,IAAK,cACL,IAAK,cACL,IAAK,OACL,IAAK,aACH,IAAKE,UAAUD,GAAGD,GAChB,MAEGD,EAAYC,KACfD,EAAYC,GAAQ,IAEtBD,EAAYC,GAAQ,IAAKE,UAAUD,GAAGD,MAAUD,EAAYC,IAC5D,MAEF,QACOD,EAAYC,KACfD,EAAYC,GAAQE,UAAUD,GAAGD,IAM3C,OAAOD,EAGH,SAAUQ,EACdG,EACAC,GAEA,OAAKD,EACAC,GAELD,EAASE,eAA8B,kBAAXF,EAAsBrB,EAAWqB,GAAUA,GAE/DA,EAAoBG,OAAyB,kBAAXF,EAAsBtB,EAAWsB,GAAUA,IAJjED,EADAC,EAQhB,SAAUL,EAAcI,EAAaC,GACzC,OAAKA,EACAD,GAEEA,EAASE,eAAYF,GAAQG,OAAOF,GAFvBA,EADAD,EAMhB,SAAUD,KAAmBK,GAIjC,IAAKA,EAAK,GAAI,OAAOA,EAAK,GAC1B,IAAKA,EAAK,GAAI,OAAOA,EAAK,GAE1B,MAAMC,EAAiD,GAEvD,IAAK,IAAId,EAAI,EAAGA,KAAM,CACpB,MAAMe,EAAMF,EAAKb,GACjB,IAAK,MAAMgB,KAASD,EACbA,EAAIC,KAELF,EAAKE,GAGPF,EAAKE,GAAU,GAAkBJ,OAAOG,EAAIC,GAAQF,EAAKE,IAGzDF,EAAKE,GAASD,EAAIC,IAKxB,OAAOF","file":"js/chunk-2d21f89c.4990cccd.js","sourcesContent":["/**\n * @copyright 2017 Alex Regan\n * @license MIT\n * @see https://github.com/alexsasharegan/vue-functional-data-merge\n */\n/* eslint-disable max-statements */\nimport { VNodeData } from 'vue'\nimport { camelize, wrapInArray } from './helpers'\n\nconst pattern = {\n styleList: /;(?![^(]*\\))/g,\n styleProp: /:(.*)/,\n} as const\n\nfunction parseStyle (style: string) {\n const styleMap: Dictionary = {}\n\n for (const s of style.split(pattern.styleList)) {\n let [key, val] = s.split(pattern.styleProp)\n key = key.trim()\n if (!key) {\n continue\n }\n // May be undefined if the `key: value` pair is incomplete.\n if (typeof val === 'string') {\n val = val.trim()\n }\n styleMap[camelize(key)] = val\n }\n\n return styleMap\n}\n\n/**\n * Intelligently merges data for createElement.\n * Merges arguments left to right, preferring the right argument.\n * Returns new VNodeData object.\n */\nexport default function mergeData (...vNodeData: VNodeData[]): VNodeData\nexport default function mergeData (): VNodeData {\n const mergeTarget: VNodeData & Dictionary = {}\n let i: number = arguments.length\n let prop: string\n\n // Allow for variadic argument length.\n while (i--) {\n // Iterate through the data properties and execute merge strategies\n // Object.keys eliminates need for hasOwnProperty call\n for (prop of Object.keys(arguments[i])) {\n switch (prop) {\n // Array merge strategy (array concatenation)\n case 'class':\n case 'directives':\n if (arguments[i][prop]) {\n mergeTarget[prop] = mergeClasses(mergeTarget[prop], arguments[i][prop])\n }\n break\n case 'style':\n if (arguments[i][prop]) {\n mergeTarget[prop] = mergeStyles(mergeTarget[prop], arguments[i][prop])\n }\n break\n // Space delimited string concatenation strategy\n case 'staticClass':\n if (!arguments[i][prop]) {\n break\n }\n if (mergeTarget[prop] === undefined) {\n mergeTarget[prop] = ''\n }\n if (mergeTarget[prop]) {\n // Not an empty string, so concatenate\n mergeTarget[prop] += ' '\n }\n mergeTarget[prop] += arguments[i][prop].trim()\n break\n // Object, the properties of which to merge via array merge strategy (array concatenation).\n // Callback merge strategy merges callbacks to the beginning of the array,\n // so that the last defined callback will be invoked first.\n // This is done since to mimic how Object.assign merging\n // uses the last given value to assign.\n case 'on':\n case 'nativeOn':\n if (arguments[i][prop]) {\n mergeTarget[prop] = mergeListeners(mergeTarget[prop], arguments[i][prop])\n }\n break\n // Object merge strategy\n case 'attrs':\n case 'props':\n case 'domProps':\n case 'scopedSlots':\n case 'staticStyle':\n case 'hook':\n case 'transition':\n if (!arguments[i][prop]) {\n break\n }\n if (!mergeTarget[prop]) {\n mergeTarget[prop] = {}\n }\n mergeTarget[prop] = { ...arguments[i][prop], ...mergeTarget[prop] }\n break\n // Reassignment strategy (no merge)\n default: // slot, key, ref, tag, show, keepAlive\n if (!mergeTarget[prop]) {\n mergeTarget[prop] = arguments[i][prop]\n }\n }\n }\n }\n\n return mergeTarget\n}\n\nexport function mergeStyles (\n target: undefined | string | object[] | object,\n source: undefined | string | object[] | object\n) {\n if (!target) return source\n if (!source) return target\n\n target = wrapInArray(typeof target === 'string' ? parseStyle(target) : target)\n\n return (target as object[]).concat(typeof source === 'string' ? parseStyle(source) : source)\n}\n\nexport function mergeClasses (target: any, source: any) {\n if (!source) return target\n if (!target) return source\n\n return target ? wrapInArray(target).concat(source) : source\n}\n\nexport function mergeListeners (...args: [\n { [key: string]: Function | Function[] } | undefined,\n { [key: string]: Function | Function[] } | undefined\n]) {\n if (!args[0]) return args[1]\n if (!args[1]) return args[0]\n\n const dest: { [key: string]: Function | Function[] } = {}\n\n for (let i = 2; i--;) {\n const arg = args[i]\n for (const event in arg) {\n if (!arg[event]) continue\n\n if (dest[event]) {\n // Merge current listeners before (because we are iterating backwards).\n // Note that neither \"target\" or \"source\" must be altered.\n dest[event] = ([] as Function[]).concat(arg[event], dest[event])\n } else {\n // Straight assign.\n dest[event] = arg[event]\n }\n }\n }\n\n return dest\n}\n"],"sourceRoot":""}