enb / enb-bem-techs

ENB package to build BEM-projects
Other
22 stars 22 forks source link

deps: ignores mod-val inside elems #204

Open incrop opened 8 years ago

incrop commented 8 years ago

Trying to build deps for simplest bemdecl (using enb-bem-techs 2.2.1):

exports.blocks = [{"name": "a"}];

Scenario 1

a.deps.js

({
    mustDeps: [
        {mods: {m: 'v'}},
        {elem: 'e', mods: {m: 'v'}},
        {block: 'b', elems: {elem: 'e', mods: {m: 'v'}}}
    ]
});

deps-old tech

exports.deps = [
    {"block": "a", "mod": "m"},
    {"block": "a", "mod": "m", "val": "v"},
    {"block": "a", "elem": "e"},
    {"block": "a", "elem": "e", "mod": "m"},
    {"block": "a", "elem": "e", "mod": "m", "val": "v"},
    {"block": "b"},
    {"block": "b", "elem": "e"},
    {"block": "b", "elem": "e", "mod": "m"},
    {"block": "b", "elem": "e", "mod": "m", "val": "v"},
    {"block": "a"}
];

deps tech

exports.deps = [
    {"block": "a", "elem": "e"},
    {"block": "a", "elem": "e", "mod": "m"},
    {"block": "b"},
    {"block": "b", "elem": "e"},
    {"block": "b", "elem": "e", "mod": "m"},
    {"block": "a", "elem": "e", "mod": "m", "val": "v"},
    {"block": "b", "elem": "e", "mod": "m", "val": "v"},
    {"block": "a", "mod": "m"},
    {"block": "a", "mod": "m", "val": "v"},
    {"block": "a"}
];

All seems good.

Scenario 2

a.deps.js

({
    mustDeps: [
        {mod: 'm', val: 'v'},
        {elem: 'e', mod: 'm', val: 'v'},
        {block: 'b', mod: 'm', val: 'v',
         elems: {elem: 'e', mod: 'm', val: 'v'}} // watch for elemMod here
    ]
});

deps-old tech

exports.deps = [
    {"block": "a", "mod": "m", "val": "v"},
    {"block": "a", "elem": "e", "mod": "m", "val": "v"},
    {"block": "b", "mod": "m", "val": "v"},
    {"block": "b", "elem": "e", "mod": "m", "val": "v"}, // still here for deps-old
    {"block": "a"}
];

deps tech

exports.deps = [
    {"block": "a", "elem": "e"},
    {"block": "a", "elem": "e", "mod": "m"},
    {"block": "b"},
    {"block": "b", "elem": "e"}, // but not for deps
    {"block": "a", "elem": "e", "mod": "m", "val": "v"},
    {"block": "b", "mod": "m"},
    {"block": "b", "mod": "m", "val": "v"},
    {"block": "a", "mod": "m"},
    {"block": "a", "mod": "m", "val": "v"},
    {"block": "a"}
];

(Extra mod-without-val entities are expected for deps tech because of implicit mustDeps *_mod_val*_mod*)

Issue

deps tech treats {elem, mod, val} as just {elem} inside elems. This is clearly a bug, since all other forms expand correctly.

By the way, {block: 'b', elem: {elem: 'e', mod: 'm', val: 'v'}} is not handled by both techs. Is it right behavior?