{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-tom/demos/tom/astWrapper.js"],"names":["excludedProperties","createObservingAccessorsOn","object","propertyName","observer","newPropertyName","Object","defineProperty","get","set","value","notify","wrapAST","astNode","type","key","Array","isArray","entry"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kBAAMA,qBAAqB,CAAC,KAAD,EAAQ,KAAR,EAAe,OAAf,EAAwB,MAAxB,CAA3B;;;;;;;;;;;;;;;AAEA,qBAASC,0BAAT,CAAoCC,MAApC,EAA4CC,YAA5C,EAA0DC,QAA1D,EAAoE;AAChE,sBAAMC,kBAAkB,MAAMF,YAA9B;AACAD,uBAAOG,eAAP,IAA0BH,OAAOC,YAAP,CAA1B;AACAG,uBAAOC,cAAP,CAAsBL,MAAtB,EAA8BC,YAA9B,EAA4C;AACxCK,0BAAM;AAAE,+BAAON,OAAOG,eAAP,CAAP;AAAiC,qBADD;AAExCI,wBAAIC,KAAJ,EAAW;AACPN,iCAASO,MAAT;AACAT,+BAAOG,eAAP,IAA0BK,KAA1B;AACH;AALuC,iBAA5C;AAOH;;AAEc,qBAASE,OAAT,CAAiBC,OAAjB,EAA0BT,QAA1B,EAAoC;AAC/C;AACA,oBAAGS,QAAQC,IAAX,EAAiB;AACb,yBAAK,MAAMC,GAAX,IAAkBF,OAAlB,EAA2B;AACvB,8BAAMH,QAAQG,QAAQE,GAAR,CAAd;;AAEA,4BAAGC,MAAMC,OAAN,CAAcP,KAAd,CAAH,EAAyB;AACrB,iCAAI,MAAMQ,KAAV,IAAmBR,KAAnB,EAA0B;AACtBE,wCAAQM,KAAR;AACH;;AAED;AACA;AACH;;AAED,gCAAO,OAAOR,KAAd;AACI,iCAAK,UAAL;AACI;AACA;AACJ,iCAAK,QAAL;AACI;AACAE,wCAAQF,KAAR;AACA;AACJ;AACIT,2DAA2BY,OAA3B,EAAoCE,GAApC,EAAyCX,QAAzC;AATR;AAWH;AACJ;AACJ;;+BA5BuBQ,O","file":"astWrapper.js","sourcesContent":["const excludedProperties = ['end', 'loc', 'start', 'type'];\n\nfunction createObservingAccessorsOn(object, propertyName, observer) {\n    const newPropertyName = '_' + propertyName;\n    object[newPropertyName] = object[propertyName];\n    Object.defineProperty(object, propertyName, {\n        get() { return object[newPropertyName]; },\n        set(value) {\n            observer.notify()\n            object[newPropertyName] = value; \n        }\n    })\n}\n\nexport default function wrapAST(astNode, observer) {\n    // simply check if the object is an astNode\n    if(astNode.type) {\n        for (const key in astNode) {\n            const value = astNode[key];\n            \n            if(Array.isArray(value)) {\n                for(const entry of value) {\n                    wrapAST(entry);\n                }\n                \n                // Todo: proxy the array\n                continue;\n            }\n            \n            switch(typeof value) {\n                case 'function':\n                    // ignore functions\n                    break;\n                case 'object':\n                    // assume it is an astNode\n                    wrapAST(value);\n                    break;\n                default:\n                    createObservingAccessorsOn(astNode, key, observer);\n            }\n        }\n    }\n}"]}