npm i postxml-beml --save-dev
varfs=require('fs'),postxml=require('postxml'),plugin=require('postxml-beml');varhtml=fs.readFileSync('input.html','utf8');varopts={elemPrefix: '__',modPrefix: '_',modDlmtr: '_'};varoutput=postxml(html,[plugin(opts)]);<divblock="b-animals"><divelem="cat" mod="size:big, color:red"></div></div>translated to
<divclass="b-animals"><divclass="b-animals__cat b-animals__cat_size_big b-animals__cat_color_red"></div></div><divblock="animals"><divblock="unicorn"></div></div><divclass="animals"><divclass="unicorn"></div></div><divblock="animals"><divelem="item"><divelem="item-name"></div></div></div><divclass="animals"><divclass="animals__item"><divclass="animals__item-name"></div></div></div><divblock="animals"><divblock="unicorn" mod="size:large, female"></div></div><divclass="animals"><divclass="unicorn inicorn_size_large unicorn_female"></div></div><divblock="animals"><divelem="item" mix="block:unicorn, mod: [large, female]"><divblock="unicorn" elem="photo"></div><divelem="item-name"></div></div></div><divclass="animals"><divclass="animals__item unicorn unicorn_large unicorn_female"><divclass="unicorn__photo"></div><divclass="animals__item-name"></div></div></div>For complex values you can use pseudo JSON syntax:
<divblock="unicorn" mix="block:animals, elem:item, mod:{size:large,gender:female}"></div><divblock="unicorn" mix="{block:b-mix-1}, {block:b-mix-2, mod:[mod1, mod2]}"></div><divclass="unicorn animals__item animals__item_size_large animals__item_gender_female"></div><divclass="unicorn b-mix-1 b-mix-2 b-mix-2_mod1 b-mix-2_mod_2"></div>MIT