{"ScriptPreparationCode":"get = _.get\r\nclass MenuProxy {\r\n constructor(menu) {\r\n const proxies = new WeakMap();\r\n\r\n const getObjByRef = (ref) =\u003E {\r\n const pathToObject = ref.replace(/\\//g, \u0027.\u0027).replace(\u0027#\u0027, \u0027menu\u0027);\r\n return get({\r\n menu\r\n }, pathToObject);\r\n };\r\n\r\n const handler = {\r\n get(target, key) {\r\n if (target[key] \u0026\u0026 typeof target[key] === \u0027object\u0027) {\r\n const obj = target[key]?.$ref ? getObjByRef(target[key]?.$ref) : target[key];\r\n if (proxies.has(obj)) {\r\n return proxies.get(obj);\r\n }\r\n\r\n const proxy = new Proxy(obj, handler);\r\n proxies.set(obj, proxy);\r\n return proxy;\r\n }\r\n\r\n return target[key];\r\n },\r\n };\r\n return new Proxy(menu, handler);\r\n }\r\n}\r\n\r\nmenu = {\r\n $id: \u0027#\u0027,\r\n items: [{\r\n \u0022name\u0022: \u0022\u0414\u043E\u0434\u0441\u0442\u0435\u0440\u0022\r\n }],\r\n structure: [{\r\n items: [{\r\n menuItem: {\r\n \u0022$ref\u0022: \u0022#/items/0\u0022\r\n }\r\n }]\r\n }]\r\n};\r\n\r\nmp = new MenuProxy(menu)","TestCases":[{"Name":"proxy","Code":"mp.structure[0].items[0].menuItem","IsDeferred":false},{"Name":"object","Code":"menu.structure[0].items[0].menuItem","IsDeferred":false},{"Name":"proxy with cache","Code":"mp.structure[0].items[0].menuItem","IsDeferred":false},{"Name":"object with lodash","Code":"const pathToObject = menu.structure[0].items[0].menuItem.$ref.replace(/\\//g, \u0027.\u0027).replace(\u0027#\u0027, \u0027menu\u0027);\r\nget({ menu }, pathToObject);","IsDeferred":false}]}