{"version":3,"file":"npm.vue-functional-data-merge.js","mappings":"wTAEMA,EAAU,CACdC,MAAO,SACPC,UAAW,QACZC,UAAW,iBAGZ,SAASC,EAAaC,EAAiBL,GACrC,OAAOA,EAAQA,EAAMM,cAAgB,GAOvC,SAASC,EAAWF,GAGlB,IAFA,IALiBE,EAKbC,EAAgC,CAAC,EAADC,EAAA,EAEtBC,EAAAL,EAAMM,MAAMX,EAAQG,WAApBM,EAAAC,EAAAE,OAAAH,IAAgC,CAAzC,IACCI,EAAAH,EAAAD,GAAAE,MAAAX,EAAAE,WAACY,EAAAD,EAAA,GAAKE,EAAAF,EAAA,IACVC,EAAMA,EAAIE,UAKS,iBAARD,IACTA,EAAMA,EAAIC,QAEZR,GAjBeD,EAiBIO,EAhBdP,EAAIU,QAAQjB,EAAQC,MAAOG,KAgBLW,EAAA,CAG7B,OAAOP,CAAA,CAST,SAASA,IAOP,IANA,IAEIR,EACAI,EAHAI,EAA+C,CAAC,EAChDC,EAAYS,UAAUN,OAKnBH,KAGL,IAAa,IAAAC,EAAA,EAAAG,EAAAM,OAAOC,KAAKF,UAAUT,IAAtBC,EAAAG,EAAAD,OAAAF,IACX,OADGV,EAAAa,EAAAH,IAGD,IAAK,QACL,IAAK,QACL,IAAK,aAKH,GAJKW,MAAMC,QAAQd,EAAYR,MAC7BQ,EAAYR,GAAQ,IAGT,UAATA,EAAkB,CACpB,IAAIc,OAAA,EAEFA,EADEO,MAAMC,QAAQJ,UAAUT,GAAGc,OACrBL,UAAUT,GAAGc,MAEb,CAACL,UAAUT,GAAGc,OAExB,IAAK,IAAIR,EAAI,EAAGA,EAAID,EAAMF,OAAQG,IAAK,CACrC,IAAIS,EAAIV,EAAMC,GACG,iBAANS,IACTV,EAAMC,GAAKR,EAAWiB,GAAA,CAG1BN,UAAUT,GAAGc,MAAQT,CAAA,CAKvBN,EAAYR,GAAQQ,EAAYR,GAAMyB,OAAOP,UAAUT,GAAGT,IAC1D,MAEF,IAAK,cACH,IAAKkB,UAAUT,GAAGT,GAChB,eAEEQ,EAAYR,KACdQ,EAAYR,GAAQ,IAElBQ,EAAYR,KAEdQ,EAAYR,IAAS,KAEvBQ,EAAYR,IAASkB,UAAUT,GAAGT,GAAMgB,OACxC,MAMF,IAAK,KACL,IAAK,WACER,EAAYR,KACfQ,EAAYR,GAAQ,CAAC,GAEvB,IAAc,IAAA0B,EAAA,EAAAC,EAAAR,OAAOC,KAAKF,UAAUT,GAAGT,IAAS,CAAC,GAAnC0B,EAAAC,EAAAf,OAAAc,IAATtB,EAAAuB,EAAAD,GAEClB,EAAYR,GAAMI,GAEpBI,EAAYR,GAAMI,GAAS,GAAGqB,OAC5BjB,EAAYR,GAAMI,GAClBc,UAAUT,GAAGT,GAAMI,IAIrBI,EAAYR,GAAMI,GAASc,UAAUT,GAAGT,GAAMI,GAGlD,MAEF,IAAK,QACL,IAAK,QACL,IAAK,WACL,IAAK,cACL,IAAK,cACL,IAAK,OACL,IAAK,aACEI,EAAYR,KACfQ,EAAYR,GAAQ,CAAC,GAEvBQ,EAAYR,GAAAK,EAAA,GAAaa,UAAUT,GAAGT,GAAUQ,EAAYR,IAC5D,MAQF,QACOQ,EAAYR,KACfQ,EAAYR,GAAQkB,UAAUT,GAAGT,IAM3C,OAAOQ,CAAA,C","sources":["webpack:///../src/index.ts"],"sourcesContent":["import { VNodeData } from \"vue\";\n\nconst pattern = {\n kebab: /-(\\w)/g,\n styleProp: /:(.*)/,\n\tstyleList: /;(?![^(]*\\))/g,\n} as const;\n\nfunction camelReplace(_substr: string, match: string) {\n return match ? match.toUpperCase() : \"\";\n}\n\nfunction camelCase(str: string) {\n return str.replace(pattern.kebab, camelReplace);\n}\n\nfunction parseStyle(style: string) {\n let styleMap: Record = {};\n\n for (let 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[camelCase(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 */\nfunction mergeData(...vNodeData: VNodeData[]): VNodeData;\nfunction mergeData(): VNodeData {\n let mergeTarget: VNodeData & Record = {};\n let i: number = arguments.length;\n let prop: string;\n let event: 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 \"style\":\n case \"directives\":\n if (!Array.isArray(mergeTarget[prop])) {\n mergeTarget[prop] = [];\n }\n\n if (prop === \"style\") {\n let style: any[];\n if (Array.isArray(arguments[i].style)) {\n style = arguments[i].style;\n } else {\n style = [arguments[i].style];\n }\n for (let j = 0; j < style.length; j++) {\n let s = style[j];\n if (typeof s === \"string\") {\n style[j] = parseStyle(s);\n }\n }\n arguments[i].style = style;\n }\n\n // Repackaging in an array allows Vue runtime\n // to merge class/style bindings regardless of type.\n mergeTarget[prop] = mergeTarget[prop].concat(arguments[i][prop]);\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 (!mergeTarget[prop]) {\n mergeTarget[prop] = {};\n }\n for (event of Object.keys(arguments[i][prop] || {})) {\n // Concat function to array of functions if callback present.\n if (mergeTarget[prop][event]) {\n // Insert current iteration data in beginning of merged array.\n mergeTarget[prop][event] = [].concat(\n mergeTarget[prop][event],\n arguments[i][prop][event]\n );\n } else {\n // Straight assign.\n mergeTarget[prop][event] = arguments[i][prop][event];\n }\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 (!mergeTarget[prop]) {\n mergeTarget[prop] = {};\n }\n mergeTarget[prop] = { ...arguments[i][prop], ...mergeTarget[prop] };\n break;\n // Reassignment strategy (no merge)\n case \"slot\":\n case \"key\":\n case \"ref\":\n case \"tag\":\n case \"show\":\n case \"keepAlive\":\n default:\n if (!mergeTarget[prop]) {\n mergeTarget[prop] = arguments[i][prop];\n }\n }\n }\n }\n\n return mergeTarget;\n}\n\nexport { mergeData };\n"],"names":["t","kebab","styleProp","styleList","r","e","toUpperCase","s","a","c","o","split","length","n","i","l","trim","replace","arguments","Object","keys","Array","isArray","style","y","concat","p","f"],"sourceRoot":""}