{"_id":"bem-naming","_rev":"331481","name":"bem-naming","description":"Manage naming of BEM entities","dist-tags":{"latest":"1.0.1"},"maintainers":[{"name":"blond","email":"andrewblond@yandex.com"}],"time":{"modified":"2021-06-07T02:46:59.000Z","created":"2014-05-12T20:51:01.326Z","1.0.1":"2016-03-31T15:15:07.459Z","1.0.0":"2016-03-28T16:51:46.839Z","0.5.1":"2015-01-12T20:16:58.496Z","0.5.0":"2014-12-19T11:56:24.740Z","0.4.0":"2014-11-08T18:49:00.393Z","0.3.0":"2014-08-21T22:49:03.924Z","0.2.1":"2014-08-12T13:15:10.659Z","0.1.0":"2014-07-05T15:38:11.919Z","0.0.3":"2014-05-15T14:01:01.552Z","0.2.0":"2014-08-10T21:13:43.205Z","0.0.2":"2014-05-14T14:18:41.309Z","0.0.1":"2014-05-12T20:51:01.326Z"},"users":{},"author":{"name":"Andrew Abramov","email":"mail@blond.im"},"repository":{"type":"git","url":"git+https://github.com/bem/bem-naming.git"},"versions":{"1.0.1":{"name":"bem-naming","version":"1.0.1","description":"Manage naming of BEM entities","license":"MPL-2.0","author":{"name":"Andrew Abramov","email":"mail@blond.im"},"keywords":["bem","naming","entities","parse","stringify"],"repository":{"type":"git","url":"git+https://github.com/bem/bem-naming.git"},"engines":{"node":">= 4.0"},"main":"index.js","files":["index.js"],"devDependencies":{"ava":"0.13.0","coveralls":"2.11.9","eslint":"2.5.3","eslint-config-pedant":"0.1.1","jscs":"2.11.0","matcha":"0.7.0","nyc":"6.1.1"},"scripts":{"test":"npm run lint && npm run cover","lint":"eslint . && jscs -c .jscs.js .","unit-test":"ava","cover":"nyc ava","coveralls":"nyc report --reporter=text-lcov | coveralls","bench":"matcha benchmark/*.js"},"gitHead":"b38d61eb1d996ca009b2634410ce609384ff2852","bugs":{"url":"https://github.com/bem/bem-naming/issues"},"homepage":"https://github.com/bem/bem-naming#readme","_id":"bem-naming@1.0.1","_shasum":"d7972339cb9e59dd05589a9d1fd1bdd74e7dfc2c","_from":".","_npmVersion":"2.14.20","_nodeVersion":"4.4.1","_npmUser":{"name":"blond","email":"mail@blond.im"},"dist":{"shasum":"d7972339cb9e59dd05589a9d1fd1bdd74e7dfc2c","size":14617,"noattachment":false,"key":"/bem-naming/-/bem-naming-1.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/bem-naming/download/bem-naming-1.0.1.tgz"},"maintainers":[{"name":"blond","email":"andrewblond@yandex.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/bem-naming-1.0.1.tgz_1459437305043_0.09154718019999564"},"directories":{},"publish_time":1459437307459,"_cnpm_publish_time":1459437307459,"_hasShrinkwrap":false},"1.0.0":{"name":"bem-naming","version":"1.0.0","description":"Manage naming of BEM entities","license":"MPL-2.0","author":{"name":"Andrew Abramov","email":"mail@blond.im"},"keywords":["bem","naming","entities","parse","stringify"],"repository":{"type":"git","url":"git+https://github.com/bem/bem-naming.git"},"engines":{"node":">= 4.0"},"main":"index.js","files":["index.js"],"devDependencies":{"ava":"0.13.0","coveralls":"2.11.9","eslint":"2.5.1","eslint-config-pedant":"0.1.1","jscs":"2.11.0","matcha":"0.7.0","nyc":"6.1.1"},"scripts":{"test":"npm run lint && npm run cover","lint":"eslint . && jscs -c .jscs.js .","unit-test":"ava","cover":"nyc ava","coveralls":"nyc report --reporter=text-lcov | coveralls","bench":"matcha benchmark/*.js"},"gitHead":"95ae7aea8a315e9f080075ffd6716d986745de57","bugs":{"url":"https://github.com/bem/bem-naming/issues"},"homepage":"https://github.com/bem/bem-naming#readme","_id":"bem-naming@1.0.0","_shasum":"c035315ac7a4858957f756ec3a633586e90e0438","_from":".","_npmVersion":"2.14.20","_nodeVersion":"4.4.1","_npmUser":{"name":"blond","email":"mail@blond.im"},"dist":{"shasum":"c035315ac7a4858957f756ec3a633586e90e0438","size":14392,"noattachment":false,"key":"/bem-naming/-/bem-naming-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/bem-naming/download/bem-naming-1.0.0.tgz"},"maintainers":[{"name":"blond","email":"andrewblond@yandex.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/bem-naming-1.0.0.tgz_1459183905857_0.6150520576629788"},"directories":{},"publish_time":1459183906839,"_cnpm_publish_time":1459183906839,"_hasShrinkwrap":false},"0.5.1":{"name":"bem-naming","version":"0.5.1","description":"Manage naming of BEM entities","keywords":["bem","naming","entities","parse","stringify"],"author":{"name":"Andrew Abramov","email":"andrewblond@yandex.com"},"licenses":[{"type":"MPL-2.0","url":"https://github.com/bem/bem-naming/blob/master/LICENSE.txt"}],"repository":{"type":"git","url":"git://github.com/bem/bem-naming"},"homepage":"https://github.com/bem/bem-naming","bugs":{"url":"https://github.com/bem/bem-naming/issues"},"maintainers":[{"name":"blond","email":"andrewblond@yandex.com"}],"contributors":[{"name":"Andrew Abramov","email":"andrewblond@yandex.com"}],"engines":{"node":">= 0.10.0"},"main":"lib/bem-naming","files":["lib/bem-naming.js","LICENSE.txt"],"devDependencies":{"istanbul":"0.3.5","jscs":"1.9.0","jshint":"2.5.11","matcha":"0.6.0","mocha":"2.1.0","should":"4.5.0","uglify-js":"2.4.16","zuul":"1.16.4"},"scripts":{"test":"npm run lint && npm run unit && npm run browser","lint":"jshint . && jscs -c .jscs.js .","unit":"mocha ./test/**/*.test.js","browser":"zuul -- ./test/**/*.test.js","cover":"istanbul cover _mocha -- ./test/**/*.test.js","bench":"matcha benchmark/*.js","min":"uglifyjs lib/bem-naming.js > bem-naming.min.js","coveralls":"npm i coveralls && npm run cover && cat ./coverage/lcov.info | coveralls","travis":"npm run test && npm run coveralls"},"gitHead":"bf624ece46e8060d084505a3447e4f15ebe84f0c","_id":"bem-naming@0.5.1","_shasum":"83e8bd5ec7f28504f1b325769845d2aa876a601a","_from":".","_npmVersion":"2.1.17","_nodeVersion":"0.10.35","_npmUser":{"name":"blond","email":"andrewblond@yandex.com"},"dist":{"shasum":"83e8bd5ec7f28504f1b325769845d2aa876a601a","size":11489,"noattachment":false,"key":"/bem-naming/-/bem-naming-0.5.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/bem-naming/download/bem-naming-0.5.1.tgz"},"directories":{},"publish_time":1421093818496,"_cnpm_publish_time":1421093818496,"_hasShrinkwrap":false},"0.5.0":{"name":"bem-naming","version":"0.5.0","description":"Manage naming of BEM entities","keywords":["bem","naming"],"author":{"name":"Andrew Abramov","email":"andrewblond@yandex.com"},"licenses":[{"type":"MPL-2.0","url":"https://github.com/bem/bem-naming/blob/master/LICENSE.txt"}],"repository":{"type":"git","url":"git://github.com/bem/bem-naming"},"homepage":"https://github.com/bem/bem-naming","bugs":{"url":"https://github.com/bem/bem-naming/issues"},"contributors":[{"name":"Andrew Abramov","email":"andrewblond@yandex.com"}],"engines":{"node":">= 0.10.0"},"main":"lib/bem-naming","files":["lib/bem-naming.js","LICENSE.txt"],"devDependencies":{"istanbul":"0.3.5","jscs":"1.8.1","jshint":"2.5.11","mocha":"2.0.1","should":"4.4.1","uglify-js":"2.4.16","zuul":"1.16.0"},"scripts":{"test":"npm run lint && npm run cover && npm run browser-test","lint":"jshint . && jscs -c .jscs.js .","node-test":"mocha ./test/**/*.test.js","browser-test":"zuul -- ./test/**/*.test.js","cover":"istanbul cover _mocha -- ./test/**/*.test.js","min":"uglifyjs lib/bem-naming.js > bem-naming.min.js"},"gitHead":"59562087bf6c19dad57a9e91d0c97b19f1e1a919","_id":"bem-naming@0.5.0","_shasum":"9534c37d152fe6ee67f0a5995ac5c50d5be559a6","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"blond","email":"andrewblond@yandex.com"},"maintainers":[{"name":"blond","email":"andrewblond@yandex.com"}],"dist":{"shasum":"9534c37d152fe6ee67f0a5995ac5c50d5be559a6","size":10619,"noattachment":false,"key":"/bem-naming/-/bem-naming-0.5.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/bem-naming/download/bem-naming-0.5.0.tgz"},"directories":{},"publish_time":1418990184740,"_cnpm_publish_time":1418990184740,"_hasShrinkwrap":false},"0.4.0":{"name":"bem-naming","version":"0.4.0","description":"Manage naming of BEM entities","keywords":["bem","naming"],"author":{"name":"Andrew Abramov","email":"andrewblond@yandex.com"},"licenses":[{"type":"MPL-2.0","url":"https://github.com/bem/bem-naming/blob/master/LICENSE.txt"}],"repository":{"type":"git","url":"git://github.com/bem/bem-naming"},"homepage":"https://github.com/bem/bem-naming","bugs":{"url":"https://github.com/bem/bem-naming/issues"},"contributors":[{"name":"Andrew Abramov","email":"andrewblond@yandex.com"}],"engines":{"node":">= 0.10.0"},"main":"lib/bem-naming","files":["lib/bem-naming.js","LICENSE.txt"],"devDependencies":{"mocha":"2.0.1","should":"4.2.1","zuul":"1.13.0","jshint":"2.5.10","jscs":"1.7.3","istanbul":"0.3.2","uglify-js":"2.4.15"},"scripts":{"test":"npm run lint && npm run cover && npm run browser-test","lint":"jshint . && jscs -c .jscs.js .","node-test":"mocha ./test/**/*.test.js","browser-test":"zuul -- ./test/**/*.test.js","cover":"istanbul cover _mocha -- ./test/**/*.test.js","min":"uglifyjs lib/bem-naming.js > bem-naming.min.js"},"gitHead":"6498ef989e95538082f18fcffda8560903c0ea8c","_id":"bem-naming@0.4.0","_shasum":"e698974e832605e1e0abb8154348cb944d29cff0","_from":".","_npmVersion":"2.1.5","_nodeVersion":"0.10.33","_npmUser":{"name":"blond","email":"andrewblond@yandex.com"},"maintainers":[{"name":"blond","email":"andrewblond@yandex.com"}],"dist":{"shasum":"e698974e832605e1e0abb8154348cb944d29cff0","size":10524,"noattachment":false,"key":"/bem-naming/-/bem-naming-0.4.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/bem-naming/download/bem-naming-0.4.0.tgz"},"directories":{},"publish_time":1415472540393,"_cnpm_publish_time":1415472540393,"_hasShrinkwrap":false},"0.3.0":{"name":"bem-naming","version":"0.3.0","description":"Manage naming of BEM entities","keywords":["bem","naming"],"author":{"name":"Andrew Abramov","email":"andrewblond@yandex.com"},"repository":{"type":"git","url":"git://github.com/bem/bem-naming"},"homepage":"https://github.com/bem/bem-naming","bugs":{"url":"https://github.com/bem/bem-naming/issues"},"contributors":[{"name":"Andrew Abramov","email":"andrewblond@yandex.com"}],"engines":{"node":">= 0.10.0"},"main":"lib/bem-naming","files":["lib/bem-naming.js"],"devDependencies":{"mocha":"1.21.4","should":"4.0.4","zuul":"1.10.1","jshint":"2.5.4","jscs":"1.5.9","istanbul":"0.3.0","uglify-js":"2.4.15"},"scripts":{"test":"npm run lint && npm run node-test && npm run browser-test && npm run cover","lint":"jshint . && jscs -c .jscs.js .","node-test":"mocha ./test/**/*.test.js","browser-test":"zuul -- ./test/**/*.test.js","cover":"istanbul cover _mocha -- ./test/**/*.test.js","min":"uglifyjs lib/bem-naming.js > bem-naming.min.js"},"gitHead":"167912152a73561dfbb386aa2c9adcce2b03fe11","_id":"bem-naming@0.3.0","_shasum":"854fbd07f1341a4351f2f705eb8557f0dee0e16b","_from":".","_npmVersion":"1.4.23","_npmUser":{"name":"andrewblond","email":"andrewblond@yandex.com"},"maintainers":[{"name":"blond","email":"andrewblond@yandex.com"}],"dist":{"shasum":"854fbd07f1341a4351f2f705eb8557f0dee0e16b","size":4344,"noattachment":false,"key":"/bem-naming/-/bem-naming-0.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/bem-naming/download/bem-naming-0.3.0.tgz"},"directories":{},"publish_time":1408661343924,"_cnpm_publish_time":1408661343924,"_hasShrinkwrap":false},"0.2.1":{"name":"bem-naming","version":"0.2.1","description":"Manage naming of BEM entities","keywords":["bem","naming"],"author":{"name":"Andrew Abramov","email":"andrewblond@yandex.com"},"repository":{"type":"git","url":"git://github.com/bem/bem-naming"},"homepage":"https://github.com/bem/bem-naming","bugs":{"url":"https://github.com/bem/bem-naming/issues"},"contributors":[{"name":"Andrew Abramov","email":"andrewblond@yandex.com"}],"engines":{"node":">= 0.10.0"},"main":"lib/bem-naming","files":["lib/bem-naming.js"],"devDependencies":{"mocha":"1.21.4","should":"4.0.4","zuul":"1.10.1","jshint":"2.5.3","jscs":"1.5.9","istanbul":"0.3.0","uglify-js":"2.4.15"},"scripts":{"test":"npm run lint && npm run node-test && npm run browser-test && npm run cover","lint":"jshint . && jscs -c .jscs.js .","node-test":"mocha ./test/**/*.test.js","browser-test":"zuul -- ./test/**/*.test.js","cover":"istanbul cover _mocha -- ./test/**/*.test.js","min":"uglifyjs lib/bem-naming.js > bem-naming.min.js"},"_id":"bem-naming@0.2.1","_shasum":"585d2d6d3fc45921a4ef9b350cacf3cea9def342","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"andrewblond","email":"andrewblond@yandex.com"},"maintainers":[{"name":"blond","email":"andrewblond@yandex.com"}],"dist":{"shasum":"585d2d6d3fc45921a4ef9b350cacf3cea9def342","size":4387,"noattachment":false,"key":"/bem-naming/-/bem-naming-0.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/bem-naming/download/bem-naming-0.2.1.tgz"},"directories":{},"publish_time":1407849310659,"_cnpm_publish_time":1407849310659,"_hasShrinkwrap":false},"0.1.0":{"name":"bem-naming","version":"0.1.0","description":"Manage naming of BEM entities","keywords":["bem","naming"],"author":{"name":"Andrew Abramov","email":"andrewblond@yandex.com"},"repository":{"type":"git","url":"git://github.com/bem/bem-naming"},"homepage":"https://github.com/bem/bem-naming","bugs":{"url":"https://github.com/bem/bem-naming/issues"},"contributors":[{"name":"Andrew Abramov","email":"andrewblond@yandex.com"}],"engines":{"node":">= 0.10.0"},"main":"lib/bem-naming","scripts":{"test":"npm run lint && npm run func-test && npm run cover","cover":"istanbul cover ./node_modules/mocha/bin/_mocha -- test/original test/harry-roberts","lint":"jshint . && jscs -c .jscs.js .","func-test":"mocha test/original test/harry-roberts"},"devDependencies":{"mocha":"1.20.1","must":"0.12.0","jshint":"2.5.1","jscs":"1.5.7","istanbul":"0.2.16"},"gitHead":"63bdd70c5bb0d5266c67be0d81b0b3bfab496175","_id":"bem-naming@0.1.0","_shasum":"cbf351ab70cea0fdee57483463502b01d8ae32af","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"andrewblond","email":"andrewblond@yandex.com"},"maintainers":[{"name":"blond","email":"andrewblond@yandex.com"}],"dist":{"shasum":"cbf351ab70cea0fdee57483463502b01d8ae32af","size":5089,"noattachment":false,"key":"/bem-naming/-/bem-naming-0.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/bem-naming/download/bem-naming-0.1.0.tgz"},"directories":{},"publish_time":1404574691919,"_cnpm_publish_time":1404574691919,"_hasShrinkwrap":false},"0.0.3":{"name":"bem-naming","version":"0.0.3","description":"Manage naming of BEM entities","keywords":["bem","naming"],"author":{"name":"Andrew Abramov","email":"andrewblond@yandex.com"},"repository":{"type":"git","url":"git://github.com/bem/bem-naming"},"homepage":"https://github.com/bem/bem-naming","bugs":{"url":"https://github.com/bem/bem-naming/issues"},"contributors":[{"name":"Andrew Abramov","email":"andrewblond@yandex.com"}],"engines":{"node":">= 0.8.0"},"main":"lib/bem-naming","scripts":{"test":"mocha test/original test/harry-roberts"},"devDependencies":{"mocha":"1.18.2","must":"0.11.0"},"_id":"bem-naming@0.0.3","dist":{"shasum":"135fd1902e883ffafc8f7d589cd2799652cf3fe9","size":4318,"noattachment":false,"key":"/bem-naming/-/bem-naming-0.0.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/bem-naming/download/bem-naming-0.0.3.tgz"},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"andrewblond","email":"andrewblond@yandex.com"},"maintainers":[{"name":"blond","email":"andrewblond@yandex.com"}],"directories":{},"publish_time":1400162461552,"_cnpm_publish_time":1400162461552,"_hasShrinkwrap":false},"0.2.0":{"name":"bem-naming","version":"0.2.0","description":"Manage naming of BEM entities","keywords":["bem","naming"],"author":{"name":"Andrew Abramov","email":"andrewblond@yandex.com"},"repository":{"type":"git","url":"git://github.com/bem/bem-naming"},"homepage":"https://github.com/bem/bem-naming","bugs":{"url":"https://github.com/bem/bem-naming/issues"},"contributors":[{"name":"Andrew Abramov","email":"andrewblond@yandex.com"}],"engines":{"node":">= 0.10.0"},"main":"lib/bem-naming","files":["lib"],"devDependencies":{"mocha":"1.21.4","should":"4.0.4","zuul":"1.10.1","jshint":"2.5.3","jscs":"1.5.9","istanbul":"0.3.0","uglify-js":"2.4.15"},"scripts":{"test":"npm run lint && npm run node-test && npm run browser-test && npm run cover","lint":"jshint . && jscs -c .jscs.js .","node-test":"mocha ./test/**/*.test.js","browser-test":"zuul -- ./test/**/*.test.js","cover":"istanbul cover _mocha -- ./test/**/*.test.js","min":"uglifyjs lib/bem-naming.js > bem-naming.min.js"},"gitHead":"5f0fe146d779f2f646d108a5ef83446f11a46e83","_id":"bem-naming@0.2.0","_shasum":"a0d5ed2a80295d8d210f1fc34558e3e5ae08c74f","_from":".","_npmVersion":"2.0.0-alpha-5","_npmUser":{"name":"andrewblond","email":"andrewblond@yandex.com"},"maintainers":[{"name":"blond","email":"andrewblond@yandex.com"}],"dist":{"shasum":"a0d5ed2a80295d8d210f1fc34558e3e5ae08c74f","size":2971,"noattachment":false,"key":"/bem-naming/-/bem-naming-0.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/bem-naming/download/bem-naming-0.2.0.tgz"},"directories":{},"publish_time":1407705223205,"_cnpm_publish_time":1407705223205,"_hasShrinkwrap":false},"0.0.2":{"name":"bem-naming","version":"0.0.2","description":"Manage naming of BEM entities","keywords":["bem","naming"],"author":{"name":"Andrew Abramov","email":"andrewblond@yandex.com"},"repository":{"type":"git","url":"git://github.com/bem/bem-naming"},"homepage":"https://github.com/bem/bem-naming","bugs":{"url":"https://github.com/bem/bem-naming/issues"},"contributors":[{"name":"Andrew Abramov","email":"andrewblond@yandex.com"}],"engines":{"node":">= 0.8.0"},"main":"lib/bem-naming","scripts":{"test":"mocha test/original test/harry-roberts"},"devDependencies":{"mocha":"1.18.2","must":"0.11.0"},"_id":"bem-naming@0.0.2","dist":{"shasum":"a9d91b786dd7d2920f410c2df7b752b66cf133a1","size":3574,"noattachment":false,"key":"/bem-naming/-/bem-naming-0.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/bem-naming/download/bem-naming-0.0.2.tgz"},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"andrewblond","email":"andrewblond@yandex.com"},"maintainers":[{"name":"blond","email":"andrewblond@yandex.com"}],"directories":{},"publish_time":1400077121309,"_cnpm_publish_time":1400077121309,"_hasShrinkwrap":false},"0.0.1":{"author":{"name":"Andrew Abramov","email":"andrewblond@yandex.com"},"name":"bem-naming","version":"0.0.1","repository":{"type":"git","url":"git://github.com/bem/bem-naming"},"homepage":"https://github.com/bem/bem-naming","bugs":{"url":"https://github.com/bem/bem-naming/issues"},"contributors":[{"name":"Andrew Abramov","email":"andrewblond@yandex.com"}],"engines":{"node":">= 0.8.0"},"main":"lib/bem-naming","scripts":{"test":"mocha test/original test/harry-roberts"},"devDependencies":{"mocha":"1.18.2","must":"0.11.0"},"description":"bem-naming [![NPM version](https://badge.fury.io/js/bem-naming.svg)](http://badge.fury.io/js/bem-naming) [![Build Status](https://travis-ci.org/bem/bem-naming.svg)](https://travis-ci.org/bem/bem-naming) [![Dependency Status](https://gemnasium.com/bem/bem-","_id":"bem-naming@0.0.1","dist":{"shasum":"7c2544cae1cea52e13e0beccc9360cc4ecb636bd","size":1804,"noattachment":false,"key":"/bem-naming/-/bem-naming-0.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/bem-naming/download/bem-naming-0.0.1.tgz"},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"andrewblond","email":"andrewblond@yandex.com"},"maintainers":[{"name":"blond","email":"andrewblond@yandex.com"}],"directories":{},"publish_time":1399927861326,"_cnpm_publish_time":1399927861326,"_hasShrinkwrap":false}},"readme":"bem-naming\n==========\n\n[![NPM Status][npm-img]][npm]\n[![Travis Status][test-img]][travis]\n[![Coverage Status][coverage-img]][coveralls]\n\n[npm]:          https://www.npmjs.org/package/bem-naming\n[npm-img]:      https://img.shields.io/npm/v/bem-naming.svg\n\n[travis]:       https://travis-ci.org/bem/bem-naming\n[test-img]:     https://img.shields.io/travis/bem/bem-naming.svg\n\n[coveralls]:    https://coveralls.io/r/bem/bem-naming\n[coverage-img]: https://img.shields.io/coveralls/bem/bem-naming.svg\n\nAbout\n-----\n\nThis tool allows getting information about BEM entity using [string](#string-representation) as well as forming string representation based on [naming object](#object-representation-of-bem-entity).\n\nInstall\n-------\n\n```\n$ npm install --save bem-naming\n```\n\nUsage\n-----\n\n```js\nvar bemNaming = require('bem-naming');\n\nbemNaming.parse('button__text'); // { block: 'button', elem: 'text' }\n\nbemNaming.stringify({ block: 'button', modName: 'checked' }); // button_checked\n```\n\nTable of Contents\n-----------------\n\n* [String representation](#string-representation)\n* [Object representation of BEM entity](#object-representation-of-bem-entity)\n* [API](#api)\n* [Common misconceptions](#common-misconceptions)\n* [Custom naming convention](#custom-naming-convention)\n* [Convention by Harry Roberts](#convention-by-harry-roberts)\n\nString representation\n---------------------\nTo define BEM entities we often use a special string format that allows us 100% define what entity exactly is represented.\n\nAccording to original BEM-naming convention it looks like the following:\n\n```js\n'block[_block-mod-name[_block-mod-val]][__elem-name[_elem-mod-name[_elem-mod-val]]]'\n```\n\n*(Parameters within square brackets are optional)*\n\n* Block — `block-name`.\n* Block's modifier in key-value format — `block-name_mod-name_mod-val`.\n* Block's boolean modifier — `block-name_mod`.\n* Block's element — `block-name__elem-name`.\n* Element's modifier in key-value format — `block-name__elem-name_mod-name_mod-val`.\n* Element's boolean modifier — `block-name__elem_mod`.\n\nObject representation of BEM entity\n-----------------------------------\n\nBEM entities can be defined with a help of JS object with the following fields:\n\n* `block` — a block name. The field is required because only a block exists as an independent BEM entity\n* `elem` — an element name.\n* `modName` — a modifier name.\n* `modVal` — a modifier value.\n\nThe modifier consists of a pair of fields `modName` and `modVal`. This means that the field `modVal` without `modName` has no meaning.\n\nExample:\n\n```js\n// The block modifier\n{\n    block: 'block',\n    modName: 'mod',\n    modVal: 'val'\n}\n\n// Not valid BEM-notation\n{\n    block: 'block',\n    modVal: 'val'\n}\n```\n\nTo describe the boolean modifier field `modVal` must be specified as `true`.\n\nExample:\n\n```js\n// Boolean modifier of a block\n{\n    block: 'block',\n    modName: 'mod',\n    modVal: true\n}\n\n// Shorthand for the boolean modifier of a block\n{\n    block: 'block',\n    modName: 'mod'\n}\n\n// Not valid BEM-notation\n{\n    block: 'block',\n    modName: 'mod',\n    modVal: false\n}\n```\n\nAPI\n---\n\n* [validate(str)](#validatestr)\n* [parse(str)](#parsestr)\n* [stringify(obj)](#stringifyobj)\n* [typeOf(str)](#typeofstr)\n* [typeOf(obj)](#typeofobj)\n* [isBlock(str)](#isblockstr)\n* [isBlock(obj)](#isblockobj)\n* [isBlockMod(str)](#isblockmodstr)\n* [isBlockMod(obj)](#isblockmodobj)\n* [isElem(str)](#iselemstr)\n* [isElem(obj)](#iselemobj)\n* [isElemMod(str)](#iselemmodstr)\n* [isElemMod(obj)](#iselemmodobj)\n* [elemDelim](#elemdelim)\n* [modDelim](#moddelim)\n* [modValDelim](#modvaldelim)\n\n### validate(str)\n\nChecks a string to be valid BEM notation.\n\nExample:\n\n```js\nbemNaming.validate('block-name');  // true\nbemNaming.validate('^*^');         // false\n```\n\n### parse(str)\n\nIt parses string into naming object.\n\nExample:\n\n```js\nbemNaming.parse('block__elem_mod_val');  // { block: 'block', elem: 'elem',\n                                         //   modName: 'mod', modVal: 'val' }\n```\n\n### stringify(obj)\n\nIt forms a string according to naming object.\n\nExample:\n\n```js\nbemNaming.stringify({\n    block: 'block', elem: 'elem',\n    modName: 'mod', modVal: 'val'\n}); // 'block__elem_mod_val'\n```\n\n### `typeOf(str)`\n\nReturns a string indicating the type of the BEM entity.\n\nExample:\n\n```js\nbemNaming.typeOf('block');             // block\nbemNaming.typeOf('block_mod');         // blockMod\nbemNaming.typeOf('block__elem');       // elem\nbemNaming.typeOf('block__elem_mod');   // elemMod\n```\n\n### typeOf(obj)\n\nReturns a string indicating the type of the BEM entity.\n\nExample:\n\n```js\nbemNaming.typeOf({ block: 'block' });                               // block\nbemNaming.typeOf({ block: 'block', modName: 'mod' });               // blockMod\nbemNaming.typeOf({ block: 'block', elem: 'elem' });                 // elem\nbemNaming.typeOf({ block: 'block', elem: 'elem', modName: 'mod' }); // elemMod\n```\n\n### isBlock(str)\n\nChecks whether string is a block.\n\nExample:\n\n```js\nbemNaming.isBlock('block-name');   // true\nbemNaming.isBlock('block__elem');  // false\n```\n\n### isBlock(obj)\n\nChecks whether naming object is a block.\n\nExample:\n\n```js\nbemNaming.isBlock({ block: 'block-name' });           // true\nbemNaming.isBlock({ block: 'block', elem: 'elem' });  // false\n```\n\n### isBlockMod(str)\n\nChecks whether string is modifier of a block.\n\nExample:\n\n```js\nbemNaming.isBlockMod('block_mod');        // true\nbemNaming.isBlockMod('block__elem_mod');  // false\n```\n\n### isBlockMod(obj)\n\nChecks whether naming object is modifier of a block.\n\nExample:\n\n```js\nbemNaming.isBlockMod({ block: 'block',\n    modName: 'mod', modVal: true });  // true\n\nbemNaming.isBlockMod({ block: 'block', elem: 'elem',\n    modName: 'mod', modVal: true });  // false\n```\n\n### isElem(str)\n\nChecks whether string is element of a block.\n\nExample:\n\n```js\nbemNaming.isElem('block__elem');  // true\nbemNaming.isElem('block-name');   // false\n```\n\n### isElem(obj)\n\nChecks whether naming object is element of a block.\n\nExample:\n\n```js\nbemNaming.isElem({ block: 'block', elem: 'elem' });  // true\nbemNaming.isElem({ block: 'block-name' });           // false\n```\n\n### isElemMod(str)\n\nChecks whether string is modifier of an element.\n\nExample:\n\n```js\nbemNaming.isElemMod('block__elem_mod');  // true\nbemNaming.isElemMod('block__elem');      // false\n```\n\n### isElemMod(obj)\n\nChecks whether naming object is modifier of an element.\n\nExample:\n\n```js\nbemNaming.isElemMod({ block: 'block', elem: 'elem',\n    modName: 'mod', modVal: true });  // true\n\nbemNaming.isElemMod({ block: 'block',\n    modName: 'mod', modVal: true});   // false\n```\n\n### elemDelim\n\nString to separate elem from block.\n\n### modDelim\n\nString to separate modifiers from blocks and elements.\n\n### modValDelim\n\nString to separate value of modifier from name of modifier.\n\nCommon misconceptions\n---------------------\n\nBEM methodology involves the use of flat structure inside a block. It means that BEM entity can not be represented as an element of the other element and the following string representation will be invalid:\n\n```js\n'block__some-elem__sub-elem'\n```\n\nAlso there is no such BEM entity as a modifier and an element modifier simultaneously so the following string representation will be invalid:\n\n```js\n'block_block-mod-name_block-mod-val__elem-name_elem-mod-name_elem-mod-val'\n```\n\nCustom naming convention\n------------------------\n\nUse `bemNaming` function to create instance to manage naming of your own naming convention.\n\nExample:\n\n```js\nvar myNaming = bemNaming({\n    elem: '-',\n    mod: { name: '--', val: '_' }\n    wordPattern: '[a-zA-Z0-9]+'   // because element and modifier's separators include\n});                               // hyphen in it, we need to exclude it from block,\n                                  // element and modifier's name\n\nmyNaming.parse('block--mod_val'); // { block: 'block',\n                                  //   modName: 'mod', modVal: 'val' }\n\nmyNaming.stringify({              // 'blockName-elemName--boolElemMod'\n    block: 'blockName',\n    elem: 'elemName',\n    modName: 'boolElemMod'\n});\n```\n\n### bemNaming({ elem, mod, wordPattern })\n\n#### elem\n\nType: `String`\n\nDefault: `__`\n\nSeparates element's name from block\n\n#### mod\n\nType: `String`, `{ name: String, val: String }`\n\nDefault: `_`\n\nSeparates modifiers from blocks and elements.\n\nThis option can take object with following fields:\n\n* `name` — separates name of modifier from blocks and elements.\n\n  Default as `_`.\n\n* `val` — separates value of modifier from name of modifier.\n\n  Default as the value of the `name`.\n\n#### wordPattern\n\nType: `String`\n\nDefault: `[a-z0-9]+(?:-[a-z0-9]+)*`\n\nDefines which symbols can be used for block, element and modifier's names.\n\nConvention by Harry Roberts\n---------------------------\n\nAccording to this convention elements are delimited with two underscores (`__`), modifiers are delimited by two hyphens (`--`), and values of modifiers are delimited by one underscore (`_`).\n\nRead more in the [Guidelines](http://cssguidelin.es/#bem-like-naming).\n\nExample:\n\n```js\nvar twoDashes = bemNaming('two-dashes');\n\ntwoDashes.parse('block__elem');    // { block: 'block', elem: 'elem' }\ntwoDashes.parse('block--mod_val'); // { block: 'block',\n                                   //   modName: 'mod', modVal: 'val' }\n\ntwoDashes.stringify({              // 'block__elem--mod'\n    block: 'block',\n    elem: 'elem',\n    modName: 'mod'\n});\n```\n\nLicense\n-------\n\nCode and documentation copyright 2014 YANDEX LLC. Code released under the [Mozilla Public License 2.0](LICENSE.txt).\n","_attachments":{},"homepage":"https://github.com/bem/bem-naming#readme","bugs":{"url":"https://github.com/bem/bem-naming/issues"},"license":"MPL-2.0"}