{"version":3,"file":"ng-vue2.min.mjs","sources":["../../src/directives/ng-vue-2.js"],"sourcesContent":["const camelCase = _.camelCase;\n\nexport default [function () {\n    return {\n        restrict: 'A',\n        terminal: true, // any directive with lower priority will be ignored\n        priority: 1001, // 1 more than ngNonBindable => disable angular interpolation!\n        link($scope, [element], attr ) {\n\n            patchVModel(element, attr);\n\n            const options  = $scope.$eval(attr.ngVue||\"{}\");\n            const data     = {};\n            const computed = {};\n            const methods  = {};\n\n            const managedProps = parseAttributes(attr);\n\n            managedProps.filter(({type})=>type=='bind').forEach(({ rawAttribute, name, expression, modifiers }) => {\n\n                const dataName = `ngVueDataWrapper_${name}`;\n\n                data[dataName] = $scope.$eval(expression);\n\n                computed[name] = { get: ( )=>data[dataName] };\n\n                if(modifiers.includes('sync')) {\n\n                    computed[name].set = (v)=>{\n                        if($scope.$eval(expression) === v) return;\n\n                        $scope.$apply(()=>{  \n                            console.debug(`vue(${name}) => ng(${expression}):`, v)\n                            $scope.$eval(`${expression} = $event`, { $event: v });\n                        })\n                    }\n                }\n\n                $scope.$watch(expression, (v)=>{ \n                    if(data[dataName] === v) return;\n                    console.debug(`ng(${expression}) => vue(${name}): `, v)\n                    data[dataName] = v\n                });              \n                \n                element.attributes[rawAttribute].value = dataName;\n            });\n\n            managedProps.filter(({type})=>type=='event').forEach(({ rawAttribute, name, expression }) => {\n\n                const methodName = `ngVueDelegateWrapper_${camelCase(name)}`;\n\n                methods[methodName] = ($event) => {\n                    $scope.$apply(()=>{  \n                        console.debug(`vue(${name}) calling ng(${expression}):`, $event)\n                        $scope.$eval(expression, { $event });\n                    });\n                }\n\n                element.attributes[rawAttribute].value = `${methodName}($event)`;   \n            });\n\n            console.debug(element.outerHTML)\n\n            const vm = new Vue({\n                ...options,\n                data,\n                computed,\n                methods,\n            });\n\n            $scope.$on(\"$destroy\", ()=>{ vm.$destroy(); })\n\n            vm.$mount(element);\n\n            managedProps.filter(({type, modifiers})=>type=='bind' && modifiers.includes('sync')).forEach(({ name, expression, updateEvent }) => {\n                vm.$children.forEach(c=> { \n                    c.$on(`update:${name}`, (v)=>{\n                        $scope.$apply(()=>{  \n                            console.debug(`vue(${updateEvent}) => ng(${expression}) =`, v)\n                            $scope.$eval(`${expression} = $event`, { $event: v });\n                        })\n                    });\n                })\n            });\n        }\n    }\n}];\n\nconst vBindRE = /^(?:v-bind:|:)(?<name>[a-z0-9-]+)(?<modifiers>(\\.[a-z]+)*)$/i\nconst vOnRE   = /^(?:v-on:|@)(?<name>[a-z0-9-]+(?::[a-z0-9-]+)*)(?<modifiers>(\\.[a-z]+)*)$/i\nconst vDirectivesRE = /^(?<name>v-model|v-html|v-text|v-show|v-class|v-attr|v-style|v-if)(?<modifiers>(\\.[a-z]+)*)$/i;\n\nfunction patchVModel(element, attr) {\n\n    // replace v-model=\"myNgVal\" with :value=\"myNgVal\" & @input=\"myNgVal=$event.target.value\"\n\n    const vModelAttrKey = Object.keys(attr).find(key=>/^vModel\\.?/.test(key));\n    if(!vModelAttrKey) return;\n    \n    const expression = attr      [vModelAttrKey];\n    const rawAttr    = attr.$attr[vModelAttrKey];\n    const modifiers  = rawAttr.replace(/^v-model/i, '');\n\n    delete attr      [vModelAttrKey];\n    delete attr.$attr[vModelAttrKey];\n    element.removeAttributeNode(element.attributes[rawAttr])\n\n    attr      .value = expression;\n    attr.$attr.value = `v-bind:value${modifiers}`;\n\n    attr      .input = `${expression} = ($event.target ? $event.target.value : $event)`;\n    attr.$attr.input = 'v-on:input';\n\n    element.setAttribute(attr.$attr.value, attr.value)\n    element.setAttribute(attr.$attr.input, attr.input)\n}\n\nfunction parseAttributes(attr) {\n\n    const results = Object.keys(attr).map((ngAttrName) => {\n\n        const rawAttribute =  attr.$attr[ngAttrName];\n        const expression   =  attr[ngAttrName];\n\n        if(vBindRE.test(rawAttribute)) {\n            const { groups } = rawAttribute.match(vBindRE);\n            const name       = camelCase(groups.name);\n            const modifiers  = (groups.modifiers||'').split('.').filter(o=>o);\n            const type       = 'bind';\n\n            return { type, rawAttribute, name, expression, modifiers };\n        }\n\n        if(vDirectivesRE.test(rawAttribute)) {\n            const { groups } = rawAttribute.match(vDirectivesRE);\n            const name       = camelCase(groups.name);\n            const modifiers  = (groups.modifiers||'').split('.').filter(o=>o);\n            const type       = 'bind';\n\n            return { type, rawAttribute, name, expression, modifiers };\n        }\n\n        if(vOnRE.test(rawAttribute)) {\n            const { groups } = rawAttribute.match(vOnRE);\n            const name       =  groups.name.split(':').map(p=>camelCase(p)).join(':');\n            const modifiers  = (groups.modifiers||'').split('.').filter(o=>o);\n            const type       = 'event';\n\n            return { type, rawAttribute, name, expression, modifiers };\n        }\n    });\n\n    return results.filter(o=>!!o);\n}"],"names":["camelCase","_","ngVue2","restrict","terminal","priority","link","$scope","element","attr","vModelAttrKey","Object","keys","find","key","test","expression","rawAttr","$attr","modifiers","replace","removeAttributeNode","attributes","value","input","setAttribute","patchVModel","options","$eval","ngVue","data","computed","methods","managedProps","map","ngAttrName","rawAttribute","vBindRE","match","groups","type","name","split","filter","o","vDirectivesRE","vOnRE","p","join","parseAttributes","forEach","i","dataName","get","includes","set","v","$apply","console","debug","$event","$watch","methodName","e","outerHTML","vm","Vue","$on","$destroy","$mount","t","updateEvent","$children","c"],"mappings":"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"}