{"version":3,"file":"ng-vue2.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","attr","element","patchVModel","options","$eval","ngVue","data","computed","methods","managedProps","parseAttributes","filter","type","forEach","rawAttribute","name","expression","modifiers","dataName","get","includes","set","v","$apply","console","debug","$event","$watch","attributes","value","methodName","outerHTML","vm","Vue","$on","$destroy","$mount","updateEvent","$children","c","vBindRE","vOnRE","vDirectivesRE","vModelAttrKey","Object","keys","find","key","test","rawAttr","$attr","replace","removeAttributeNode","input","setAttribute","results","map","ngAttrName","match","groups","split","o","p","join"],"mappings":"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"}