Как решить задачу на js?
Фигурные скобочки в JS - тип данных Object, нужные значения в ключах значит берем Object.keys(input) и перечисляем все элементы. Далее текст разбиваем на подстроки через split и проходимся по массиву присваивая значения.
Когда то делал что то подобное . Нужная вам логика в функции parsePermissions
PS: вот поубирал лишнее и сделал демку (на выходе почти то что вы хотели). в самой функции parsePermissions тоже многое можно поубирать, но тут уж сами немного поработайте))))тык{
᠌ ᠌᠌ ᠌ ᠌ "foo": {
᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ "0": {
᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ "first": 111
᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ },
᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ "1": {
᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ "first": 222
᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ }
᠌ ᠌᠌ ᠌ ᠌ },
᠌ ᠌᠌ ᠌ ᠌ "bar": {
᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ "second": 333
᠌ ᠌᠌ ᠌ ᠌ }
}snippet
PPS: и вот еще вариантик, но тоже на стал превращать объекты в массивы)))тыкsnippetconst insert = (target,path,value) => path.split(".").reduce((a,k,i,l)=>a[k]=i+1==l.length?value:a[k]||{},target);

const parse = (list,result={}) => Object.keys(list).forEach(k=>insert(result,k,list[k]))||result;

const output = parse(input);