{"id":32266312,"url":"https://github.com/tenorok/bemer","last_synced_at":"2026-02-22T03:02:48.651Z","repository":{"id":14372788,"uuid":"17082776","full_name":"tenorok/bemer","owner":"tenorok","description":"Template engine. BEMJSON to HTML processor.","archived":false,"fork":false,"pushed_at":"2016-09-17T22:50:36.000Z","size":16454,"stargazers_count":33,"open_issues_count":1,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-01-24T05:56:53.162Z","etag":null,"topics":["bem","bemjson"],"latest_commit_sha":null,"homepage":"https://tenorok.github.io/bemer/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tenorok.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-02-22T10:32:44.000Z","updated_at":"2023-07-10T16:23:54.000Z","dependencies_parsed_at":"2022-08-30T14:51:04.531Z","dependency_job_id":null,"html_url":"https://github.com/tenorok/bemer","commit_stats":null,"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"purl":"pkg:github/tenorok/bemer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tenorok%2Fbemer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tenorok%2Fbemer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tenorok%2Fbemer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tenorok%2Fbemer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tenorok","download_url":"https://codeload.github.com/tenorok/bemer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tenorok%2Fbemer/sbom","scorecard":{"id":873853,"data":{"date":"2025-08-11","repo":{"name":"github.com/tenorok/bemer","commit":"04eef8cba166edb1ece469d8ea606386729181d7"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.6,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}}]},"last_synced_at":"2025-08-24T05:12:06.504Z","repository_id":14372788,"created_at":"2025-08-24T05:12:06.504Z","updated_at":"2025-08-24T05:12:06.504Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29704401,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T23:35:04.139Z","status":"online","status_checked_at":"2026-02-22T02:00:08.193Z","response_time":110,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bem","bemjson"],"created_at":"2025-10-22T21:26:58.033Z","updated_at":"2026-02-22T03:02:48.632Z","avatar_url":"https://github.com/tenorok.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bemer — БЭМ-шаблонизатор\n[![bower](https://img.shields.io/bower/v/bemer.svg)](http://bower.io/search/?q=bemer)\n[![npm](https://img.shields.io/npm/v/bemer.svg)](https://www.npmjs.com/package/bemer)\n[![Build Status](https://img.shields.io/travis/tenorok/bemer/master.svg)](https://travis-ci.org/tenorok/bemer)\n[![Coverage Status](https://img.shields.io/coveralls/tenorok/bemer/master.svg)](https://coveralls.io/r/tenorok/bemer)\n\nБЭМ — это методология эффективной разработки веб-приложений.\nБольшое количество информации размещено на официальном сайте [http://ru.bem.info](http://ru.bem.info).\n\nBemer — шаблонизатор, стремящийся идти по пути упрощения работы с БЭМ. Он должен быть очень удобным для разработки малых и средних проектов.\n\nИсходный код шаблонизатора разделён на [подробно задокументированные модули](http://tenorok.github.io/bemer/jsdoc/module-bemer-bemer.html) с помощью [definer](https://github.com/tenorok/definer).\n\nРекомендуется использовать bemer совместно с [i-bem](http://tenorok.github.io/get-i-bem/).\n\n## Установка\n\nBemer доступен в [Bower](http://bower.io).\n\n    bower install bemer\n\nBemer доступен в [NPM](https://www.npmjs.org).\n\n    npm install bemer\n\n## Подключение\n\n### В браузере\n\n```html\n\u003cscript src=\"bower_components/bemer/bemer.min.js\"\u003e\u003c/script\u003e\n```\n\n### В Node.js\n\n```js\nvar bemer = require('bemer');\n```\n\n## Форматы данных\n\n### Входящие данные\n\nОбщепринятым форматом входящих данных для БЭМ-шаблонизаторов является [BEMJSON](http://ru.bem.info/technology/bemjson/2.3.0/bemjson/#Синтаксис-BEMJSON).\n\n### Выходящие данные\n\nНа выходе bemer возвращает простую HTML-строку, готовую для отображения в браузере.\n\n## Получение результата\n\nЕдинственная переменная, предоставляемая шаблонизатором — `bemer` и она является функцией, которая принимает на вход один параметр — объект в формате [BEMJSON](http://ru.bem.info/technology/bemjson/2.3.0/bemjson/#Синтаксис-BEMJSON).\n\n### Один блок\n\n```js\nbemer({ block: 'page' });\n```\n\nРезультат:\n\n```html\n\u003cdiv class=\"page\"\u003e\u003c/div\u003e\n```\n\n### Блок с элементами\n\n```js\nbemer({\n    block: 'item',\n    content: [\n        { elem: 'title', content: 'Фотоаппарат' },\n        { elem: 'price', content: '14999' }\n    ]\n});\n```\n\nРезультат:\n\n```html\n\u003cdiv class=\"item\"\u003e\n    \u003cdiv class=\"item__title\"\u003eФотоаппарат\u003c/div\u003e\n    \u003cdiv class=\"item__price\"\u003e14999\u003c/div\u003e\n\u003c/div\u003e\n```\n\n## Оглавление\n\n- [Методы](#Методы)\n  - [Метод `match`](#Метод-match)\n    - [Синтаксис селекторов](#Синтаксис-селекторов)\n      - [Примеры селекторов](#Примеры-селекторов)\n      - [Примеры селекторов со звёздочкой](#Примеры-селекторов-со-звёздочкой)\n    - [Синтаксис полей шаблона](#Синтаксис-полей-шаблона)\n      - [Стандартные поля шаблона](#Стандартные-поля-шаблона)\n        - [Поле `construct`](#Поле-construct)\n        - [Поле `tag`](#Поле-tag)\n        - [Поле `single`](#Поле-single)\n        - [Поле `attrs`](#Поле-attrs)\n        - [Поле `js`](#Поле-js)\n        - [Поле `bem`](#Поле-bem)\n        - [Поле `cls`](#Поле-cls)\n        - [Поле `mods`](#Поле-mods)\n        - [Поле `elemMods`](#Поле-elemmods)\n        - [Поле `mix`](#Поле-mix)\n        - [Поле `content`](#Поле-content)\n        - [Поле `options`](#Поле-options)\n      - [Функция в значении стандартного поля шаблона](#Функция-в-значении-стандартного-поля-шаблона)\n        - [Параметр функции стандартного поля шаблона](#Параметр-функции-стандартного-поля-шаблона)\n        - [Объект `this.bemjson`](#Объект-thisbemjson)\n      - [Приоритеты в стандартных полях шаблона](#Приоритеты-в-стандартных-полях-шаблона)\n        - [Примитивные типы](#Примитивные-типы)\n        - [Массивы и объекты](#Массивы-и-объекты)\n        - [Функции](#Функции)\n      - [Произвольные поля шаблона](#Произвольные-поля-шаблона)\n      - [Наследование шаблонов](#Наследование-шаблонов)\n        - [Получение предыдущего значения поля через `this.__base`](#Получение-предыдущего-значения-поля-через-this__base)\n  - [Метод `config`](#Метод-config)\n    - [Изменение настроек шаблонизации](#Изменение-настроек-шаблонизации)\n    - [Сброс настроек шаблонизации до стандартных](#Сброс-настроек-шаблонизации-до-стандартных)\n  - [Метод `clean`](#Метод-clean)\n  - [Метод `modules`](#Метод-modules)\n  - [Метод `helper`](#Метод-helper)\n    - [Добавление помощника](#Добавление-помощника)\n- [Функции-помощники](#Функции-помощники)\n  - [Помощники для работы с деревом](#Помощники-для-работы-с-деревом)\n    - [Помощник `isFirst`](#Помощник-isfirst)\n    - [Помощник `isLast`](#Помощник-islast)\n    - [Помощник `isBlock`](#Помощник-isblock)\n    - [Помощник `isElem`](#Помощник-iselem)\n    - [Помощник `id`](#Помощник-id)\n  - [Помощники для работы со строками](#Помощники-для-работы-со-строками)\n    - [Помощник `escape`](#Помощник-escape)\n    - [Помощник `unEscape`](#Помощник-unescape)\n    - [Помощник `htmlEscape`](#Помощник-htmlescape)\n    - [Помощник `unHtmlEscape`](#Помощник-unhtmlescape)\n    - [Помощник `collapse`](#Помощник-collapse)\n    - [Помощник `stripTags`](#Помощник-striptags)\n    - [Помощник `upper`](#Помощник-upper)\n    - [Помощник `lower`](#Помощник-lower)\n    - [Помощник `repeat`](#Помощник-repeat)\n  - [Помощники для работы с числами](#Помощники-для-работы-с-числами)\n    - [Помощник `random`](#Помощник-random)\n  - [Помощники для работы с объектами](#Помощники-для-работы-с-объектами)\n    - [Помощник `extend`](#Помощник-extend)\n    - [Помощник `deepExtend`](#Помощник-deepextend)\n    - [Помощник `clone`](#Помощник-clone)\n    - [Помощник `deepClone`](#Помощник-deepclone)\n  - [Помощники для работы с типами данных](#Помощники-для-работы-с-типами-данных)\n    - [Помощники для проверки на определённый тип данных](#Помощники-для-проверки-на-определённый-тип-данных)\n    - [Помощник `is.type`](#Помощник-istype)\n    - [Помощники для проверки чисел](#Помощники-для-проверки-чисел)\n    - [Помощник `is.primitive`](#Помощник-isprimitive)\n    - [Помощник `is.every`](#Помощник-isevery)\n\n## Методы\n\n### Метод `match`\n\nПредназначен для добавления шаблона на одну или несколько БЭМ-сущностей.\n\nВ качестве параметров принимает неограниченное количество селекторов на БЭМ-сущности и последним параметром простой объект с полями шаблона.\n\nВозвращает: `{bemer}`\n\n```js\nbemer.match('block1', 'block2', 'blockN', {});\n```\n\n#### Синтаксис селекторов\n\nПо умолчанию для отделения блока от элемента используется двойное подчёркивание: `block__element`.\nА для отделения модификаторов одиночное подчёркивание: `block_mod_val`.\n\n##### Примеры селекторов\n\nБлок `header`:\n\n    header\n\nЭлемент `logo` блока `header`:\n\n    header__logo\n\nБлок `header` с булевым модификатором `adaptive`:\n\n    header_adaptive\n\nБлок `header` с модификатором `theme` в значении `red`:\n\n    header_theme_red\n\nЭлемент `logo` блока `header` с модификатором `theme` в значении `blue`:\n\n    header_theme_blue__logo\n\nЭлемент `logo` с модификатором `size` в значении `s`:\n\n    header__logo_size_s\n\nМодификатор у блока и у элемента одновременно:\n\n    header_adaptive__logo_size_m\n\nНа месте любой части селектора можно записать `*`, что будет означать произвольное значение.\n\n##### Примеры селекторов со звёздочкой\n\nЛюбой блок:\n\n    *\n\nЛюбой элемент блока `footer`:\n\n    footer__*\n\nЛюбое значение модификатора `theme` блока `footer`:\n\n    footer_theme_*\n\nЛюбое значение модификатора `size` любого элемента блока `footer`:\n\n    footer__*_size_*\n\n#### Синтаксис полей шаблона\n\nПоля шаблона содержат информацию по шаблонизации.\nВ основе технической реализации лежит помощник создания классов [inherit](https://github.com/dfilatov/inherit).\nШаблон может иметь произвольный набор полей.\n\n##### Стандартные поля шаблона\n\n###### Поле `construct`\n\nТип: `{function}`\n\nПоле `construct` устанавливает конструктор, который вызывается в начале шаблонизации БЭМ-сущности.\n\nКонструктор принимает два параметра:\n* `{object}` `bemjson` — BEMJSON БЭМ-сущности\n* `{object}` `data` — данные о БЭМ-сущности в дереве\n    * `{number}` `data.index` — индекс сущности среди сестринских элементов\n    * `{number}` `data.length` — количество сестринских элементов, включая текущий\n    * `{object}` `[data.context]` — информация о контексте родительского блока\n        * `{string}` `[data.context.block]` — имя родительского блока\n        * `{object}` `[data.context.mods]` — модификаторы родительского блока\n        * `{string}` `[data.context.elem]` — имя родительского элемента\n        * `{object}` `[data.context.elemMods]` — модификаторы родительского элемента\n\nПолучение данных о блоке `menu` из параметров конструктора:\n\n```js\nbemer.match('menu', { construct: function(bemjson, data) {\n    console.log('bemjson:', bemjson);\n    console.log('data:', data);\n}});\nbemer({ block: 'menu' });\n```\n\nВывод:\n\n```js\nbemjson: { block: 'menu' }\ndata: { index: 0, length: 1 }\n```\n\nКроме того, в `this` существуют поля `bemjson` и `data`, аналогичные параметрам конструктора.\n\nПолучение данных об элементе `item` с булевым модификатором `active` из полей контекста:\n\n```js\nbemer.match('menu__item_active', { construct: function(bemjson, data) {\n    console.log('bemjson:', this.bemjson);\n    console.log('data:', this.data);\n}});\n\nbemer({ block: 'menu', content: [\n    { elem: 'item' },\n    { elem: 'item', elemMods: { active: true }},\n    { elem: 'item' }\n] });\n```\n\nВывод:\n```js\nbemjson: {\n    block: 'menu',\n    mods: {},\n    elem: 'item',\n    elemMods: { active: true }\n}\ndata: {\n    index: 1,\n    length: 3,\n    context: {\n        block: 'menu',\n        mods: {}\n    }\n}\n```\n\n###### Поле `tag`\n\nТип: `{string}` `{boolean}`\n\nПо умолчанию: `div`\n\nПоле `tag` устанавливает имя тега.\n\nБлок в представлении тега `span`:\n\n```js\nbemer.match('text', { tag: 'span' });\nbemer({ block: 'text' });\n```\n\n```html\n\u003cspan class=\"text\"\u003e\u003c/span\u003e\n```\n\nДля указания стандартного тега `div` может быть использовано значение `true`.\n\nДля отмены строкового представления тега используется значение `false`.\nПри этом вместо текущего тега будет представлено его содержимое:\n\n```js\nbemer.match('anonymous', { tag: false });\nbemer({ block: 'anonymous', content: { block: 'inner' }});\n```\n\n```html\n\u003cdiv class=\"inner\"\u003e\u003c/div\u003e\n```\n\n###### Поле `single`\n\nТип: `{boolean}`\n\nПо умолчанию: `true` для [стандартных одиночных тегов](http://tenorok.github.io/bemer/jsdoc/module-Tag-Tag.html#singleTags)\nи `false` для всех остальных\n\nПоле `single` устанавливает одиночный или парный вид тега.\n\nБлок в представлении частного одиночного тега `mytag`:\n\n```js\nbemer.match('my', { tag: 'mytag', single: true });\nbemer({ block: 'my' });\n```\n\n```html\n\u003cmytag class=\"my\"\u003e\n```\n\n###### Поле `attrs`\n\nТип: `{object}`\n\nПо умолчанию: `{}`\n\nПоле `attrs` задаёт атрибуты тега.\n\nБлок текстового поля:\n\n```js\nbemer.match('input', { tag: 'input', attrs: { type: 'text' }});\nbemer({ block: 'input' });\n```\n\n```html\n\u003cinput class=\"input\" type=\"text\"\u003e\n```\n\nАтрибуты в шаблоне и входящем BEMJSON складываются:\n\n```js\nbemer.match('input', { tag: 'input', attrs: { type: 'text' }});\nbemer({ block: 'input', attrs: { placeholder: 'login' }});\n```\n\n```html\n\u003cinput class=\"input\" type=\"text\" placeholder=\"login\"\u003e\n```\n\n**Особый атрибут `style`**\n\nПомимо обычной строки, атрибут `style` способен принять список CSS-стилей в виде объекта.\n\nСоставные имена CSS-свойств допускается указывать как через минус (`text-align`),\nтак и в верблюжьей нотации (`textAlign`).\nЕсли в значении свойства указано число (кроме нуля), ему добавляется единица измерения пикселя (`px`).\n\nСписок CSS-свойств в виде объекта:\n\n```js\nbemer.match('text', { attrs: { style: {\n    width: 100,\n    height: 0,\n    'text-align': 'center',\n    verticalAlign: 'top'\n}}});\nbemer({ block: 'text' });\n```\n\n```html\n\u003cdiv class=\"text\" style=\"width:100px;height:0;text-align:center;vertical-align:top;\"\u003e\u003c/div\u003e\n```\n\n###### Поле `js`\n\nТип: `{boolean}` `{object}`\n\nПо умолчанию: `false`\n\nПоле `js` указывает на наличие клиентского JavaScript у блока или элемента.\nПри этом в результирующий HTML-тег добавляется:\n* дополнительный CSS-класс, по умолчанию: `i-bem`\n* атрибут с параметрами инициализации, по умолчанию: `data-bem`\n\nБлок с JS-реализацией:\n\n```js\nbemer.match('menu', { js: true });\nbemer({ block: 'menu' });\n```\n\n```html\n\u003cdiv class=\"menu i-bem\" data-bem=\"{\u0026quot;menu\u0026quot;:{}}\"\u003e\u003c/div\u003e\n```\n\nЭлемент с JS-реализацией:\n\n```js\nbemer.match('menu__item', { js: true });\nbemer({ block: 'menu', elem: 'item' });\n```\n\n```html\n\u003cdiv class=\"menu__item i-bem\" data-bem=\"{\u0026quot;menu__item\u0026quot;:{}}\"\u003e\u003c/div\u003e\n```\n\nДля передачи инициализационных параметров значением может быть простой объект.\n\nБлок с параметрами инициализации:\n\n```js\nbemer.match('man', { js: { name: 'Steve', year: 1955 }});\nbemer({ block: 'man' });\n```\n\n```html\n\u003cdiv class=\"man i-bem\" data-bem=\"{\u0026quot;man\u0026quot;:{\u0026quot;name\u0026quot;:\u0026quot;Steve\u0026quot;,\u0026quot;year\u0026quot;:1955}}\"\u003e\u003c/div\u003e\n```\n\n###### Поле `bem`\n\nТип: `{boolean}`\n\nПо умолчанию: `true`\n\nПоле `bem` указывает на необходимость добавления сформированных CSS-классов для БЭМ-сущности.\n\nТег `html` без БЭМ-классов:\n\n```js\nbemer.match('page', { tag: 'html', bem: false });\nbemer({ block: 'page' });\n```\n\n```html\n\u003chtml\u003e\u003c/html\u003e\n```\n\n###### Поле `cls`\n\nТип: `{string}`\n\nПо умолчанию: `''`\n\nПоле `cls` позволяет определить произвольную строку, добавляемую в значение атрибута `class` помимо автоматически генерируемых классов.\n\nДобавление CSS-классов `custom1` и `custom2`:\n\n```js\nbemer.match('untypical', { cls: 'custom1 custom2' });\nbemer({ block: 'untypical' });\n```\n\n```html\n\u003cdiv class=\"custom1 custom2 untypical\"\u003e\u003c/div\u003e\n```\n\n###### Поле `mods`\n\nТип: `{object}`\n\nПо умолчанию: `{}`\n\nПоле `mods` задаёт модификаторы блока.\n\nБлок `header` с модификатором `theme` в значении `red`:\n\n```js\nbemer.match('header', { mods: { theme: 'red' }});\nbemer({ block: 'header' });\n```\n\n```html\n\u003cdiv class=\"header header_theme_red\"\u003e\u003c/div\u003e\n```\n\nМодификаторы в шаблоне и входящем BEMJSON складываются:\n\n```js\nbemer.match('header', { mods: { theme: 'red' }});\nbemer({ block: 'header', mods: { adaptive: true }});\n```\n\n```html\n\u003cdiv class=\"header header_theme_red header_adaptive\"\u003e\u003c/div\u003e\n```\n\nЭлемент `logo` блока `header` с модификатором `theme` в значении `blue`:\n\n```js\nbemer.match('header__logo', { mods: { theme: 'blue' }});\nbemer({ block: 'header', elem: 'logo' });\n```\n\n```html\n\u003cdiv class=\"header__logo header_theme_blue__logo\"\u003e\u003c/div\u003e\n```\n\n**Особые значения модификаторов**\n\nПомимо строк значением модификатора может быть `null`, `true` или число.\nЗначения `undefined` и `false` отменяют установку модификатора.\n\nПример различных типов значений модификаторов:\n```js\nbemer.match('example', { mods: {\n    string: 'text',\n    nil: null,\n    yes: true,\n    zero: 0,\n    number: 5,\n    undef: undefined,\n    no: false\n}});\nbemer({ block: 'example' });\n```\n\n```html\n\u003cdiv class=\"example example_string_text example_nil_null example_yes example_zero_0 example_number_5\"\u003e\u003c/div\u003e\n```\n\n**Изменение списка модификаторов в шаблоне**\n\nПри изменении списка модификаторов автоматически накладываются подходящие шаблоны:\n```js\nbemer\n  .match('button', { mods: { theme: 'normal' }})\n  .match('button_theme_normal', { tag: 'span' });\nbemer({ block: 'button' });\n```\n\n```html\n\u003cspan class=\"button button_theme_normal\"\u003e\u003c/span\u003e\n```\n\n###### Поле `elemMods`\n\nТип: `{object}`\n\nПо умолчанию: `{}`\n\nПоле `elemMods` задаёт модификаторы элемента.\nМодификаторы в шаблоне и входящем BEMJSON складываются.\n\nЭлемент `logo` с модификатором `size` в значении `s`:\n\n```js\nbemer.match('header__logo', { elemMods: { size: 's' }});\nbemer({ block: 'header', elem: 'logo' });\n```\n\n```html\n\u003cdiv class=\"header__logo header__logo_size_s\"\u003e\u003c/div\u003e\n```\n\nПри изменении списка модификаторов автоматически накладываются подходящие шаблоны:\n```js\nbemer\n  .match('button__label', { elemMods: { size: 'm' }})\n  .match('button__label_size_m', { tag: 'label' });\nbemer({ block: 'button', elem: 'label' });\n```\n\n```html\n\u003clabel class=\"button__label button__label_size_m\"\u003e\u003c/label\u003e\n```\n\n###### Поле `mix`\n\nТип: `{array}`\n\nПо умолчанию: `[]`\n\nПоле `mix` задаёт список БЭМ-сущностей, которые необходимо примешать к текущей сущности.\nВ результате примешивания добавляются CSS-классы и JS-параметры.\n\nПримешивание блока `clearfix` к блоку `header`:\n\n```js\nbemer.match('header', { mix: [{ block: 'clearfix' }] });\nbemer({ block: 'header' });\n```\n\n```html\n\u003cdiv class=\"header clearfix\"\u003e\u003c/div\u003e\n```\n\nПримешивание элемента `menu` с JS-параметрами:\n\n```js\nbemer.match('header', { mix: [{ elem: 'menu', js: { length: 10 }}] });\nbemer({ block: 'header' });\n```\n\n```html\n\u003cdiv class=\"header i-bem header__menu\" data-bem=\"{\u0026quot;header__menu\u0026quot;:{\u0026quot;length\u0026quot;:10}}\"\u003e\u003c/div\u003e\n```\n\nПримешиваемые сущности в шаблоне и входящем BEMJSON складываются:\n\n```js\nbemer.match('header', { mix: [{ block: 'clearfix' }] });\nbemer({ block: 'header', mix: [{ block: 'menu', elem: 'wrap' }] });\n```\n\n```html\n\u003cdiv class=\"header menu__wrap clearfix\"\u003e\u003c/div\u003e\n```\n\n###### Поле `content`\n\nТип: `{*}`\n\nПоле `content` задаёт содержимое HTML-элемента.\nЗначением может быть произвольный тип данных, в том числе BEMJSON любого уровня вложенности.\n\nПростая строка в содержимом блока `page`:\n\n```js\nbemer.match('page', { content: 'Hello world!' });\nbemer({ block: 'page' });\n```\n\n```html\n\u003cdiv class=\"page\"\u003eHello world!\u003c/div\u003e\n```\n\nДобавление блока `header` и элемента `footer` в содержимое блока `page`:\n\n```js\nbemer.match('page', { content: [\n    { block: 'header' },\n    { elem: 'footer' }\n] });\nbemer({ block: 'page' });\n```\n\n```html\n\u003cdiv class=\"page\"\u003e\n    \u003cdiv class=\"header\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"page__footer\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n```\n\n###### Поле `options`\n\nТип: `{object}`\n\nПоле `options` устанавливает опции выполнения шаблона,\nс помощью которых можно переопределить [глобальные настройки](#Метод-config)\nтолько для заданных сущностей.\n\nПринимаемые параметры:\n\n* `{boolean|object}` `[escape]` — флаг экранирования спецсимволов\n  * `{boolean}` `[escape.content]` — флаг экранирования содержимого\n  * `{boolean}` `[escape.attrs]` — флаг экранирования значений атрибутов\n\n##### Функция в значении стандартного поля шаблона\n\nВ значении поля шаблона можно записывать функцию.\n\n###### Параметр функции стандартного поля шаблона\n\nФункция, указанная в значении стандартного поля шаблона принимает параметром значение одноимённого поля из BEMJSON и должна возвращать свой корректный тип данных.\n\nФункция поля `tag` должна возвращать строку:\n\n```js\nbemer.match('bold', { tag: function(bemjsonTag) {\n    if(bemjsonTag === 'span') {\n        return 'b';\n    }\n}});\nvar any = bemer({ block: 'bold', tag: 'span' });\n```\n\nВ результате у блока `bold` будет тег `b`:\n```html\n\u003cb class=\"bold\"\u003e\u003c/b\u003e\n```\n\n###### Объект `this.bemjson`\n\nКроме параметра функции в стандартных полях шаблона, для получения значений из BEMJSON можно использовать объект `this.bemjson`.\n\nФункция поля `content` может возвращать произвольный тип данных:\n\n```js\nbemer.match('header', { content: function() {\n    return this.bemjson.content || 'Hello world!';\n}});\nbemer({ block: 'header' });\n```\n\nВ содержимое блока `header` было установлено значение по умолчанию, так как в BEMJSON оно не было указано:\n\n```html\n\u003cdiv class=\"header\"\u003eHello world!\u003c/div\u003e\n```\n\n##### Приоритеты в стандартных полях шаблона\n\n###### Примитивные типы\n\nПри одновременном указании примитивного типа в значении стандартного поля шаблона и в BEMJSON, приоритет отдаётся значению из BEMJSON.\n\nОдновременное указание строки в значении поля BEMJSON и шаблона:\n\n```js\nbemer.match('text', { tag: 'span' });\nbemer({ block: 'text', tag: 'b' });\n```\n\nПриоритет у BEMJSON, поэтому блоку `text` будет присвоен тег `b`:\n\n```html\n\u003cb class=\"text\"\u003e\u003c/b\u003e\n```\n\n###### Массивы и объекты\n\nПри одновременном указании массива или объекта в значении стандартного поля шаблона и BEMJSON, значения будут складываться с приоритетом у BEMJSON.\n\nОдновременное указание объекта атрибутов в значении поля BEMJSON и шаблона:\n\n```js\nbemer.match('input', { attrs: {\n    type: 'text',\n    name: 'age'\n}});\nvar header = bemer({ block: 'input', attrs: { type: 'number' }});\n```\n\nПриоритет у BEMJSON, поэтому атрибуту `type` блока `input` будет присвоено значение `number`:\n\n```html\n\u003cdiv class=\"input\" type=\"number\" name=\"age\"\u003e\u003c/div\u003e\n```\n\n###### Функции\n\nВ качестве значения стандартному полю шаблона можно указать функцию.\nПри этом вероятно, что значение возвращается на основе нелинейной логики, и возможно с использованием значения из BEMJSON.\nТаким образом, у значения, возвращаемого функцией приоритет по отношению к BEMJSON.\n\nУказание тега в функции шаблона и в BEMJSON одновременно:\n\n```js\nbemer.match('text', { tag: function() { return 'span'; }});\nbemer({ block: 'text', tag: 'b' });\n```\n\nПриоритет у функции, поэтому блоку `text` будет присвоен тег `span`:\n\n```html\n\u003cspan class=\"text\"\u003e\u003c/span\u003e\n```\n\n##### Произвольные поля шаблона\n\nКроме стандартных полей можно задавать произвольные поля шаблона.\nОни будут доступны в `this`.\n\nПроизвольное поле `sum` складывает два числа:\n\n```js\nbemer.match('sum', {\n    content: function() {\n        return this.sum(this.bemjson.a, this.bemjson.b);\n    },\n    sum: function(a, b) {\n        return a + b;\n    }\n});\nbemer({ block: 'sum', a: 3, b: 7 });\n```\n\nСумма устанавливается в содержимое:\n\n```html\n\u003cdiv class=\"sum\"\u003e10\u003c/div\u003e\n```\n\n##### Наследование шаблонов\n\nПо мере декларации поступающие шаблоны могут быть унаследованы от добавленных ранее.\nШаблонизатор делает это самостоятельно.\n\nДекларация нескольких шаблонов на блок `input`:\n\n```js\nbemer\n    .match('input', { js: true, tag: 'input' })\n    .match('input', { attrs: { type: 'text' }})\n    .match('input_inactive', { js: false });\n\nbemer({ block: 'input', mods: { inactive: true }});\n```\n\nРезультат совмещает в себе все указанные правила:\n\n```html\n\u003cinput class=\"input input_inactive\" type=\"text\"\u003e\n```\n\nНаследование производится только от шаблонов с более общими селекторами.\nНапример, шаблон на блок с модификатором будет унаследован от шаблона на одноимённый блок, но не наоборот.\nАналогичные правила от общего к частному действуют для шаблонов со звёздочками в селекторах.\n\nДекларация элементов блока `header`:\n\n```js\nbemer\n    .match('header__*', { tag: 'span' })\n    .match('header__logo', { attrs: { title: 'logo' }})\n    .match('header__logo_theme_*', { mix: [{ block: 'coloring' }] })\n    .match('header__logo_theme_red', { content: '#fff' });\n\nbemer({ block: 'header', elem: 'logo', elemMods: { theme: 'red' }});\n```\n\nВсе шаблоны задекларированы в порядке от общего к частному, поэтому результат совмещает в себе все указанные правила:\n\n```html\n\u003cspan class=\"header__logo header__logo_theme_red coloring\" title=\"logo\"\u003e#fff\u003c/span\u003e\n```\n\n###### Получение предыдущего значения поля через `this.__base`\n\nПри наследовании шаблонов есть возможность получить\nпредыдущее значение поля.\n\nБлок `text` формирует своё содержимое по цепочке шаблонов:\n\n```js\nbemer\n    .match('text', { content: 'Hello' })\n    .match('text', { content: function() { return this.__base() + ' world'; }})\n    .match('text', { content: function() { return this.__base() + '!'; }});\n\nbemer({ block: 'text' });\n```\n\nВ результате выполнения цепочки вызовов в содержимое устанавливается строка «Hello world!»:\n\n```html\n\u003cdiv class=\"text\"\u003eHello world!\u003c/div\u003e\n```\n\n### Метод `config`\n\nУстанавливает настройки шаблонизации в соответствии с переданными параметрами или сбрасывает настройки до стандартных при вызове без параметров.\n\nМетод принимает один необязательный параметр:\n\n* `{object}` `[config]` — конфигурационные параметры\n  * `{object}` `[config.delimiters]` — разделители имён\n    * `{string}` `[config.delimiters.mod=_]` — разделитель блока и модификатора, элемента и модификатора, модификатора и значения\n    * `{string}` `[config.delimiters.elem=__]` — разделитель блока и элемента\n  * `{boolean|object}` `[config.xhtml=false]` — флаг формирования тегов в формате XHTML\n    * `{boolean}` `[config.xhtml.repeatBooleanAttr=false]` — флаг автоповтора булева атрибута\n    * `{boolean}` `[config.xhtml.closeSingleTag=false]` — флаг закрытия одиночного тега\n  * `{boolean|object}` `[config.escape=true]` — флаг экранирования спецсимволов\n    * `{boolean}` `[config.escape.content=true]` — флаг экранирования содержимого\n    * `{boolean}` `[config.escape.attrs=true]` — флаг экранирования значений атрибутов\n  * `{string}` `[config.tag=div]` — стандартное имя тега\n  * `{string}` `[config.bemClass=i-bem]` — имя класса для js-инициализации\n  * `{string}` `[config.bemAttr=data-bem]` — имя атрибута для хранения параметров инициализации\n  * `{string}` `[config.idPrefix=i]` — префикс идентификаторов, формируемых помощником [id](#Помощник-id)\n\nВозвращает: `{bemer}`\n\n#### Изменение настроек шаблонизации\n\nИзменение разделителей и стандартного имени тега:\n\n```js\nbemer\n    .config({\n        delimiters: {\n            mod: '=',\n            elem: '--'\n        },\n        tag: 'span'\n    })\n    .match('header--logo=size=s', { content: 'logo' });\n\nbemer({ block: 'header', elem: 'logo', elemMods: { size: 's' }});\n```\n\nРезультат работы шаблонизатора с изменёнными настройками:\n\n```html\n\u003cspan class=\"header--logo header--logo=size=s\"\u003elogo\u003c/span\u003e\n```\n\n#### Сброс настроек шаблонизации до стандартных\n\nВ продолжение предыдущего примера, если вызвать метод `config` без параметров, то все настройки сбросятся до стандартных и селекторы последующих шаблонов нужно будет записывать со стандартными разделителями:\n\n```js\nbemer\n    .config()\n    .match('header__logo_size_s', { attrs: { title: 'logo' }});\n\nbemer({ block: 'header', elem: 'logo', elemMods: { size: 's' }});\n```\n\nРезультат работы шаблонизатора со сброшенными до стандартных настройками:\n\n```html\n\u003cspan class=\"header__logo header__logo_size_s\" title=\"logo\"\u003elogo\u003c/span\u003e\n```\n\n### Метод `clean`\n\nУдаляет все задекларированные шаблоны и сбрасывает порядковый номер для формирования идентификаторов помощником [id](#Помощник-id).\n\nВозвращает: `{bemer}`\n\nУдаление шаблона на блок `name`:\n\n```js\nbemer\n    .match('name', { tag: 'span' })\n    .clean();\n\nbemer({ block: 'name' })\n```\n\nБлоку `name` будет установлен тег `div`, потому что шаблон был удалён:\n\n```html\n\u003cdiv class=\"name\"\u003e\u003c/div\u003e\n```\n\n### Метод `modules`\n\nШаблонизатор bemer состоит из самостоятельных модулей,\nкаждый из которых предназначен для выполнения собственных целей.\n\nИмеющиеся модули достаточно абстрактные, благодаря чему могут быть использованы за пределами bemer:\n\n* [`Tag`](http://tenorok.github.io/bemer/jsdoc/module-Tag-Tag.html) — работа с тегом\n* [`Selector`](http://tenorok.github.io/bemer/jsdoc/module-Selector-Selector.html) — работа с БЭМ-селектором\n* [`Node`](http://tenorok.github.io/bemer/jsdoc/module-Node-Node.html) — работа с БЭМ-узлом\n* [`Match`](http://tenorok.github.io/bemer/jsdoc/module-Match-Match.html) — проверка БЭМ-узла на соответствие шаблону\n\nДля получения вышеперечисленных модулей предназначен метод `modules`, который принимает один необязательный параметр:\n\n* `{string}` `[name]` — имя модуля\n\nВозвращает: `{object|*}` — все модули или один заданный модуль\n\nИспользование модуля `Selector`:\n\n```js\nvar Selector = bemer.modules('Selector');\n\nvar header = new Selector('header_theme')\n    .modVal('dark')\n    .elem('logo')\n    .elemMod('size', 's');\n\nconsole.log(header.toString());\n```\n\nВ консоль будет выведена строка:\n```\nheader_theme_dark__logo_size_s\n```\n\n### Метод `helper`\n\nВ bemer существуют функции-помощники.\nЭто такие функции, которые доступны в `this` из всех шаблонов.\nПомимо [стандартных помощников](#Функции-помощники) можно добавлять свои собственные с помощью метода `helper`.\n\nМетод принимает два обязательных параметра:\n\n* `{string}` `name` — имя помощника\n* `{function}` `callback` — тело функции помощника\n\nВозвращает: `{bemer}`\n\n#### Добавление помощника\n\nДобавление и использование помощника `multi`, который умножает два числа:\n\n```js\nbemer\n    .helper('multi', function(a, b) {\n        return a * b;\n    })\n    .match('header', {\n        content: function(content) {\n            return this.multi(content[0], content[1]);\n        }\n    });\n\nbemer({ block: 'header', content: [4, 9] })\n```\n\nПроизведение устанавливается в содержимое:\n\n```html\n\u003cdiv class=\"header\"\u003e36\u003c/div\u003e\n```\n\n## Функции-помощники\n\nФункции-помощники доступны в `this` из всех шаблонов.\n\nПомимо стандартных помощников можно добавлять свои собственные с помощью [метода helper](#Метод-helper).\n\n### Помощники для работы с деревом\n\n#### Помощник `isFirst`\n\nПроверяет на первый элемент среди сестринских.\n\nВозвращает: `{boolean}`\n\n#### Помощник `isLast`\n\nПроверяет на последний элемент среди сестринских.\n\nВозвращает: `{boolean}`\n\n#### Помощник `isBlock`\n\nПроверяет БЭМ-сущность на блок.\n\nВозвращает: `{boolean}`\n\n#### Помощник `isElem`\n\nПроверяет БЭМ-сущность на элемент.\n\nВозвращает: `{boolean}`\n\n#### Помощник `id`\n\nФормирует уникальное значение для HTML-атрибута `id`.\n\nРезультат состоит из префикса, соли в виде случайного четырёхзначного числа и итерируемого числа начиная с нуля: `i` + `6140` + `0`.\n\nСоль необходима для сохранения уникальности идентификаторов при шаблонизации одновременно на клиенте и сервере.\n\nДля абсолютной гарантии уникальности рекомендуется изменить префикс на клиенте или сервере.\n\nИзменить префикс глобально можно с помощью [метода config](#Метод-config).\n\nИзменить префикс для конкретного формируемого идентификатора можно через параметр помощника.\n\nПараметры:\n\n* `{string}` `[prefix=i]` — префикс для формируемого идентификатора, по умолчанию `i`\n\nВозвращает: `{string}`\n\n### Помощники для работы со строками\n\n#### Помощник `escape`\n\nЭкранирует строку текста.\n\nПредваряет дополнительным слешем: слеш, кавычки, символы перевода строки, каретки и табуляции.\n\nПараметры:\n\n* `{string}` `string` — строка\n\nВозвращает: `{string}`\n\n#### Помощник `unEscape`\n\nДеэкранирует строку текста.\n\nПараметры:\n\n* `{string}` `string` — строка\n\nВозвращает: `{string}`\n\n#### Помощник `htmlEscape`\n\nЭкранирует HTML-строку.\n\nЗаменяет на HTML-сущности: амперсанд, угловые скобки и кавычки.\n\nСодержимое экранируется автоматически для любой БЭМ-сущности.\n\nПараметры:\n\n* `{string}` `string` — строка\n\nВозвращает: `{string}`\n\n#### Помощник `unHtmlEscape`\n\nДеэкранирование HTML-строки.\n\nПараметры:\n\n* `{string}` `string` — строка\n\nВозвращает: `{string}`\n\n#### Помощник `collapse`\n\nУдаляет повторяющиеся пробелы.\n\nПараметры:\n\n* `{string}` `string` — строка\n\nВозвращает: `{string}`\n\n#### Помощник `stripTags`\n\nВырезает HTML-теги.\n\nПараметры:\n\n* `{string}` `string` — строка\n\nВозвращает: `{string}`\n\n#### Помощник `upper`\n\nПереводит всю строку, заданный символ или промежуток символов в верхний регистр.\n\nПараметры:\n\n* `{string}` `string` — строка\n* `{number}` `[indexA]` — порядковый номер символа\n* `{number}` `[indexB]` — порядковый номер символа для указания промежутка\n\nВозвращает: `{string}`\n\n#### Помощник `lower`\n\nПереводит всю строку, заданный символ или промежуток символов в нижний регистр.\n\nПараметры:\n\n* `{string}` `string` — строка\n* `{number}` `[indexA]` — порядковый номер символа\n* `{number}` `[indexB]` — порядковый номер символа для указания промежутка\n\nВозвращает: `{string}`\n\n#### Помощник `repeat`\n\nПовторяет строку заданное количество раз с указанным разделителем\n\nПараметры:\n\n* `{string}` `string` — строка\n* `{number}` `n` — количество повторений\n* `{string}` `[separator]` — разделитель, по умолчанию отсутствует\n\nВозвращает: `{string}`\n\n### Помощники для работы с числами\n\n#### Помощник `random`\n\nВозвращает случайное число.\n\nПри вызове без аргументов возвращает случайное дробное число от 0 до 1.\n\nПри вызове с указанием минимума и максимума возвращает дробное число из этого промежутка.\n\nПри вызове со всеми тремя аргументами возвращает число из заданного промежутка, делящееся без остатка на указанный шаг.\n\nПараметры:\n\n* `{number}` `[min]` — минимум\n* `{number}` `[max]` — максимум\n* `{number}` `[step]` — шаг\n\nВозвращает: `{number}`\n\n### Помощники для работы с объектами\n\n#### Помощник `extend`\n\nРасширяет объект.\n\nПараметры:\n\n* `{object}` `object` — расширяемый объект\n* `{...object}` `source` — расширяющие объекты в любом количестве\n\nВозвращает: `{object}`\n\n#### Помощник `deepExtend`\n\nРасширяет объект рекурсивно.\n\nПараметры:\n\n* `{object}` `object` — расширяемый объект\n* `{...object}` `source` — расширяющие объекты в любом количестве\n\nВозвращает: `{object}`\n\n#### Помощник `clone`\n\nКлонирует объект.\n\nПараметры:\n\n* `{object}` `object` — клонируемый объект\n\nВозвращает: `{object}`\n\n#### Помощник `deepClone`\n\nКлонирует объект рекурсивно.\n\nПараметры:\n\n* `{object}` `object` — клонируемый объект\n\nВозвращает: `{object}`\n\n### Помощники для работы с типами данных\n\nКаждый из этих помощников принимает неограниченное количество параметров.\n\n#### Помощники для проверки на определённый тип данных\n\nЕсли все переданные параметры принадлежат типу данных, на который осуществляется проверка, помощники возвращают `true`, иначе `false`.\n\nПараметры:\n\n* `{...*}` `subject` — параметры\n\nВозвращают: `{boolean}`\n\nСписок помощников для проверки на определённый тип данных:\n\n* `is.string` — строка\n* `is.number` — число\n* `is.nan` — NaN\n* `is.boolean` — логический тип\n* `is.null` — null\n* `is.undefined` — undefined\n* `is.date` — дата\n* `is.regexp` — регулярное выражение\n* `is.array` — массив\n* `is.map` — простой объект (хэш, карта)\n* `is.argument` — аргументы функции\n* `is.function` — функция\n* `is.native` — системная функция\n\n#### Помощник `is.type`\n\nОпределяет тип переданных параметров.\n\nВозвращает строку, соответствующую имени одного из помощников для проверки на определённый тип данных, которые перечислены выше.\n\nВозвращает `mixed`, если были переданы параметры разных типов данных.\n\nПараметры:\n\n* `{...*}` `subject` — параметры\n\nВозвращает: `{string}`\n\n#### Помощники для проверки чисел\n\nПроверяют параметры на число определённого вида.\n\nПараметры:\n\n* `{...*}` `subject` — параметры\n\nВозвращают: `{boolean}`\n\nСписок помощников для проверки чисел:\n\n* `is.integer` — целое число\n* `is.float` — дробное число\n\n#### Помощник `is.primitive`\n\nПроверяет параметры на примитивные типы данных.\n\nВ примитивные типы входят: string, number, NaN, boolean, null, undefined.\n\nПараметры:\n\n* `{...*}` `subject` — параметры\n\nВозвращает: `{boolean}`\n\n#### Помощник `is.every`\n\nПроверяет параметры на единый тип данных.\n\nВозвращает `true`, если все переданные параметры относятся к одному типу данных, иначе `false`.\n\nПараметры:\n\n* `{...*}` `subject` — параметры\n\nВозвращает: `{boolean}`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftenorok%2Fbemer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftenorok%2Fbemer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftenorok%2Fbemer/lists"}