{"_id":"@bem/sdk.keyset","_rev":"2-f0cd918b6ffc470d5617027aae2561c5","name":"@bem/sdk.keyset","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@bem/sdk.keyset","version":"0.1.0","description":"Representation of BEM i18n keyset","publishConfig":{"access":"public"},"main":"index.js","scripts":{"test":"npm run specs","specs":"mocha","cover":"nyc mocha"},"repository":{"type":"git","url":"git+https://github.com/bem/bem-sdk.git"},"keywords":["bem","i18n","keyset","l10n"],"author":{"name":"Vasiliy Loginevskiy","email":"yeti.or@gmail.com"},"license":"MPL-2.0","bugs":{"url":"https://github.com/bem/bem-sdk/issues?q=label%3Apkg%3Akeyset"},"homepage":"https://github.com/bem/bem-sdk/tree/master/packages/keyset#readme","devDependencies":{"common-tags":"^1.8.0"},"dependencies":{"node-eval":"^2.0.0","xamel":"^0.3.1"},"gitHead":"1592666257e4a801856be855cd48c4e80aced180","_id":"@bem/sdk.keyset@0.1.0","_npmVersion":"6.2.0","_nodeVersion":"8.6.0","_npmUser":{"name":"yeti-or","email":"yeti.or@gmail.com"},"dist":{"integrity":"sha512-6MkiUhwf6xi/dAVT9bPwD3tGjJBNVP+MR9CawUEiNESDupLzvZlY4fGRWPhdHz0JuQo2BdAM3Fi4IoVhI61RCw==","shasum":"1984382f61e86fe0d6fbe3715fdca8e8404ab619","tarball":"https://registry.npmjs.org/@bem/sdk.keyset/-/sdk.keyset-0.1.0.tgz","fileCount":15,"unpackedSize":70639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbtfJ6CRA9TVsSAnZWagAAuysP/jrPnSzsOUJCuAO10RRm\nW4AqlEPsh5uA7fGw+nrN8O8T8VFPVAv/BiRqy8L2+/BvtwMqgbS96wqiqmTF\nNTcvR4NklOPCz6gTbz469/q9AJFylehkN1IRNmSA0TNAeAkB8Dxht1AcrHC3\nxk9uEVj7TImkLVuD4VluSbJaVJ5UTmA0FZ3wvqx50A5ld4l1l3OL18puEoZT\nCP46/hxDBrZqSjjLC5h7QhwIu0jCy1vwShgGk7DYWp46HnaEiT/cW8cxA7Nt\nK7yAnK3Q1ivdl9d88use7ptDwPFrWxx92ZhcgRpbMH/dUDmfh5rLA/MoHsXn\nkimRbvcAoi783jQjSpVR6rByoYyvXrQ8fHSlRuPLMTFessjGgixesEJA2uBa\nECxQWEPwR3BcuyrEWpofosjk0tSECDHEeiVu8m/NWUUzlIeZKBzwIh5pSYzi\nFZWaIp1P4ezdEueVQnWNCrq9A3WHsdAyRz0ZiInJ2E9CVHgvF9+nK7+txZ8m\n7Jn9hgDyfJy8Z8j927vsVj3OBJKxN9HaVD2UeoCX+W/114B9bG++qLl8708x\n7buhYymg2qHLB96YkHm1PSkjH5vGqPXsmmItK5tAq8AQrPIlhixhhtobUwhT\nMRvoG0fAH1Gimttc7EDwvhxwI4hIp1LrHlAY/Pdna+EvtYNLM5wNFS2KL+Ni\n8JnV\r\n=o4ao\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDN4aNemfmbIhuFkSiR2S6JWqRaz+a18IBmr3t3Uv7+NQIhAJKLSyomBFEY7Om44bF6BdRHyg2QzcTFEXwr1BBnJjmg"}]},"maintainers":[{"name":"blond","email":"mail@blond.im"},{"name":"qfox","email":"zxqfox@gmail.com"},{"name":"tadatuta","email":"i@tadatuta.com"},{"name":"veged","email":"veged@ya.ru"},{"name":"vithar","email":"vitaly@harisov.name"},{"name":"yeti-or","email":"yeti.or@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdk.keyset_0.1.0_1538650745498_0.2779149780836627"},"_hasShrinkwrap":false},"0.1.1":{"name":"@bem/sdk.keyset","version":"0.1.1","description":"Representation of BEM i18n keyset","publishConfig":{"access":"public"},"main":"index.js","scripts":{"test":"npm run specs","specs":"mocha","cover":"nyc mocha"},"repository":{"type":"git","url":"git+https://github.com/bem/bem-sdk.git"},"keywords":["bem","i18n","keyset","l10n"],"author":{"name":"Vasiliy Loginevskiy","email":"yeti.or@gmail.com"},"license":"MPL-2.0","bugs":{"url":"https://github.com/bem/bem-sdk/issues?q=label%3Apkg%3Akeyset"},"homepage":"https://github.com/bem/bem-sdk/tree/master/packages/keyset#readme","devDependencies":{"common-tags":"^1.8.0"},"dependencies":{"node-eval":"^2.0.0","xamel":"^0.3.1"},"gitHead":"b4cc0b689c65ac8bc124e3964ac84a7046989851","_id":"@bem/sdk.keyset@0.1.1","_nodeVersion":"8.6.0","_npmVersion":"lerna/3.10.5/node@v8.6.0+x64 (darwin)","dist":{"integrity":"sha512-6/oxqEDEbVe74R5bFEy4gexpJUmgSg0/1sVRpDCTWqnIPWiadSNLNlseZh0/UezfJBldTBzWbo13cf7UFRxBxQ==","shasum":"e25ff50e3a25b16ccf37e40d69aa082a9bfa7a75","tarball":"https://registry.npmjs.org/@bem/sdk.keyset/-/sdk.keyset-0.1.1.tgz","fileCount":15,"unpackedSize":80979,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctKUdCRA9TVsSAnZWagAAGxwP/iNr1W6bZ2dOAa1g6Abw\nDCKG7iaJ1jSfHWUQIMHc1DDTksyUlaXynVY6wp12LXn5L+YrtPaY7A3To2aH\ndBfx/g0MrwfmuLbjekxJbRHoZvBld/AS8fgkfuybSqe9WtEnzAzsQRcX1Aza\n0vohzNXORrq9TlS8aso3XU8VuQvd0jB3BRj4nrsQ/zSp7AcQ/z85cJSdXw8I\n/55ry1Xp4z4NYIDMj84f6GAv0igGlB1UL2Cft20kKlgIltrnuZpztgNk/8QN\nxjjbxBq6wzppKuVp8MtpbhCm3KQ+zs9uS85NA5lBAHz0rn2hw0EtHboNzI3d\nF3yijAbOI1nz3mGbuVGOKbvyJI3yPwFlp5wik6qXtunECTTmme4MctNjr0YR\nRwcukLixsxsfB2JqSDiAEIG08Z5fFQFjUCieV/hqtl4vR9cayf4zMrqNCzOE\nw1gjijqCE6Gt3W3jTej8v+vIWrqll4SX/qBLvYfq6W5JD3651VZWRVbzEojW\nclHrxNxLb0hihPfULuKcMw3Ztt/oru8A39rZDDOn19oHGNLoWQmRLT38wzaf\nqMoSL62nS+dQh1JehbxkrfcmTi3XeMm4BFrY32paG+3uDnMEIUqPgJS6NlwE\nGwsrRV7fr7zobGFAggGHEpXaBiw9VDCKtCa4HtFZ8rBfRcrlsxBjTQhog3o+\nD+r0\r\n=+yUN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChSDjSQMwYZdT5F+TzsnLh8cRsGAd09E1x7eh2PdFCnQIhAJ7202UDAU5jrKphbs2Nk3lD6wduOgFAU6XdiwAq6CHB"}]},"maintainers":[{"name":"blond","email":"mail@blond.im"},{"name":"qfox","email":"zxqfox@gmail.com"},{"name":"tadatuta","email":"i@tadatuta.com"},{"name":"veged","email":"veged@ya.ru"},{"name":"vithar","email":"vitaly@harisov.name"},{"name":"yeti-or","email":"yeti.or@gmail.com"}],"_npmUser":{"name":"qfox","email":"zxqfox@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdk.keyset_0.1.1_1555342620366_0.5270720596987957"},"_hasShrinkwrap":false}},"time":{"created":"2018-10-04T10:59:05.370Z","0.1.0":"2018-10-04T10:59:05.698Z","modified":"2022-04-04T18:20:59.590Z","0.1.1":"2019-04-15T15:37:00.495Z"},"maintainers":[{"name":"blond","email":"mail@blond.im"},{"name":"qfox","email":"zxqfox@gmail.com"},{"name":"tadatuta","email":"i@tadatuta.com"},{"name":"veged","email":"veged@ya.ru"},{"name":"vithar","email":"vitaly@harisov.name"},{"name":"yeti-or","email":"yeti.or@gmail.com"}],"description":"Representation of BEM i18n keyset","homepage":"https://github.com/bem/bem-sdk/tree/master/packages/keyset#readme","keywords":["bem","i18n","keyset","l10n"],"repository":{"type":"git","url":"git+https://github.com/bem/bem-sdk.git"},"author":{"name":"Vasiliy Loginevskiy","email":"yeti.or@gmail.com"},"bugs":{"url":"https://github.com/bem/bem-sdk/issues?q=label%3Apkg%3Akeyset"},"license":"MPL-2.0","readme":"# Keyset\n\nThe tool for representation of BEM i18n keyset.\n\n[![NPM Status][npm-img]][npm]\n\n[npm]:            https://www.npmjs.org/package/@bem/sdk.keyset\n[npm-img]:        https://img.shields.io/npm/v/@bem/sdk.keyset.svg\n\n* [Introduction](#introduction)\n* [Try keyset](#try-keyset)\n* [Quick start](#quick-start)\n* [Formats](#formats)\n* [API reference](#api-reference)\n\n## Introduction\n\nKeyset representations BEM project's keysets and returns a JavaScript object with information about it.\n\n## Try keyset\n\nAn example is available in the [RunKit editor](https://runkit.com/godfreyd/5c3339d802ce8e00124ead3f).\n\n## Quick start\n\n> **Attention.** To use `@bem/sdk.keyset`, you must install [Node.js 8.0+](https://nodejs.org/en/download/).\n\nTo run the `@bem/sdk.keyset` package:\n\n1. [Install keyset](#installing-the-bemsdkkeyset-package).\n1. [Declaration keyset](#declaration-keyset).\n\n### Installing the `@bem/sdk.keyset` package\n\nTo install the `@bem/sdk.keyset` package, run the following command:\n\n```bash\n$ npm install --save @bem/sdk.keyset\n```\n\n### Declaration keyset\n\nSpecify the Keyset name, path, and format for keyset. The `Keyset` class is a constructor for classes that enable format-sensitive keyset formatting.\n\n**Example:**\n\n```js\nconst { Keyset } = require('@bem/sdk.keyset');\nconst keyset = new Keyset('Time', 'src/features/Time/Time.i18n');\nkeyset.name; // => 'Time'.\nkeyset.path; // => 'src/features/Time/Time.i18n'.\nkeyset.format; // => 'taburet' — default format, see Formats.\n```\n\n[RunKit live editor](https://runkit.com/godfreyd/5c3339d802ce8e00124ead3f).\n\n## Formats\n\nKeyset has two default formats:\n\n| Format | Extension |\n|--------|-----------|\n| `enb` | `.js` |\n| `taburet` | `.ts` |\n\nIf you want to change default extension, override a variable `keyset.langsKeysExt` before saving keyset.\n\n**Example:**\n\n```js\nconst mockfs = require('mock-fs');\nconst { Keyset, Key, ParamedKey, PluralKey, LangKeys } = require(\"@bem/sdk.keyset\");\n\nmockfs({\n    'src/features/Time/Time.i18n': {}\n});\n\nconst langKeys = new LangKeys('ru', [\n    new Key('Time difference', 'Разница во времени'),\n    new PluralKey('{count} minute', {\n        one: new ParamedKey('{count} minute', '{count} минута', ['count']),\n        some: new ParamedKey('{count} minute', '{count} минуты', ['count']),\n        many: new ParamedKey('{count} minute', '{count} минут', ['count']),\n        none: new Key('{count} minute', 'нет минут')\n    })\n]);\n\nconst keyset = new Keyset('Time', 'src/features/Time/Time.i18n');\nkeyset.addKeysForLang('ru', langKeys);\nkeyset.langsKeysExt = '.ts';\nawait keyset.save();\nkeyset;\n```\n\n[RunKit live editor](https://runkit.com/godfreyd/5c347b7d8b4b220012693664).\n\n## API reference\n\n### keyset.load()\n\nLoads keyset from project's file system.\n\n```js\nasync keyset.load();\n```\n\n**Example:**\n\n```js\nconst mockfs = require('mock-fs');\nconst { stripIndent } = require('common-tags');\nconst { Keyset } = require(\"@bem/sdk.keyset\");\n\nmockfs({\n    'src/features/Time/Time.i18n': {\n        'ru.js': stripIndent`\n            export const ru = {\n                'Time difference': 'Разница во времени',\n                '{count} minute': {\n                    'one': '{count} минута',\n                    'some': '{count} минуты',\n                    'many': '{count} минут',\n                    'none': 'нет минут',\n                },\n            };\n        `,\n        'en.js': stripIndent`\n            export const en = {\n                'Time difference': 'Time difference',\n                '{count} minute': {\n                    'one': '{count} minute',\n                    'some': '{count} minutes',\n                    'many': '{count} minutes',\n                    'none': 'none',\n                },\n            };\n        `\n    }\n});\n\nconst keyset = new Keyset('Time', 'src/features/Time/Time.i18n');\nawait keyset.load();\nkeyset.langs; // => ['en', 'ru']\n```\n\n[RunKit live editor](https://runkit.com/godfreyd/5c334a31bf421300126811b3).\n\n### keyset.getLangKeysForLang(lang)\n\nGets keys from found keyset.\n\n```js\n/**\n* Gets keys.\n*\n* @param {string} lang — The language to traverse.\n* @return {string[]} — Keys.\n*/\nkeyset.getLangKeysForLang(lang);\n```\n\n**Example:**\n\n```js\nconst mockfs = require('mock-fs');\nconst { stripIndent } = require('common-tags');\nconst { Keyset } = require(\"@bem/sdk.keyset\");\n\nmockfs({\n    'src/features/Time/Time.i18n': {\n        'ru.js': stripIndent`\n            export const ru = {\n                'Time difference': 'Разница во времени',\n                '{count} minute': {\n                    'one': '{count} минута',\n                    'some': '{count} минуты',\n                    'many': '{count} минут',\n                    'none': 'нет минут',\n                },\n            };\n        `,\n        'en.js': stripIndent`\n            export const en = {\n                'Time difference': 'Time difference',\n                '{count} minute': {\n                    'one': '{count} minute',\n                    'some': '{count} minutes',\n                    'many': '{count} minutes',\n                    'none': 'none',\n                },\n            };\n        `\n    }\n});\n\nconst keyset = new Keyset('Time', 'src/features/Time/Time.i18n');\nawait keyset.load();\nconst langKeys = keyset.getLangKeysForLang('ru');\n\nlangKeys.keys; // => [Key {name: 'Time difference', value: 'Разница во времени'}, PluralKey { ... }]\n```\n\n[RunKit live editor](https://runkit.com/godfreyd/5c345a7b617b3200145cbcfc).\n\n### keyset.addKeysForLang(lang, langKeys)\n\nAdds keys for language. Use with `keyset.save()` method.\n\n```js\n/**\n* Adds keys.\n*\n* @param {string} lang — The language to add.\n* @return {object[]} — Keys.\n*/\nkeyset.addKeysForLang(lang, langKeys);\n```\n\n**Example:**\n\n```js\nconst mockfs = require('mock-fs');\nconst { Keyset, Key, ParamedKey, PluralKey, LangKeys } = require(\"@bem/sdk.keyset\");\n\nmockfs({\n    'src/features/Time/Time.i18n': {}\n});\n\nconst ruLangKeys = new LangKeys('ru', [\n    new Key('Time difference', 'Разница \"во\" времени'),\n    new PluralKey('{count} minute', {\n        one: new ParamedKey('{count} minute', '{count} минута', ['count']),\n        some: new ParamedKey('{count} minute', '{count} минуты', ['count']),\n        many: new ParamedKey('{count} minute', '{count} минут', ['count']),\n        none: new Key('{count} minute', 'нет минут')\n    })\n]);\n\nconst enLangKeys = new LangKeys('en', [\n    new Key('Time difference', 'Time difference',),\n    new PluralKey('{count} minute', {\n        one: new ParamedKey('{count} minute', '{count} minute', ['count']),\n        some: new ParamedKey('{count} minute', '{count} minutes', ['count']),\n        many: new ParamedKey('{count} minute', '{count} minutes', ['count']),\n        none: new Key('{count} minute', 'none')\n    })\n]);\n\nconst keyset = new Keyset('Time', 'src/features/Time/Time.i18n');\nkeyset.addKeysForLang('ru', ruLangKeys);\nkeyset.addKeysForLang('en', enLangKeys);\nawait keyset.save();\nkeyset.langs; // => ['ru', 'en']\n```\n\n[RunKit live editor](https://runkit.com/godfreyd/5c3476cf617b3200145cd6e6).\n\n### keyset.save()\n\nSaves keyset to project's file system. Use with `keyset.addKeysForLang(lang, langKeys)` method.\n\n```js\nasync keyset.save();\n```\n\n**Example:**\n\n```js\nconst mockfs = require('mock-fs');\nconst { Keyset, Key, ParamedKey, PluralKey, LangKeys } = require(\"@bem/sdk.keyset\");\n\nmockfs({\n    'src/features/Time/Time.i18n': {}\n});\n\nconst langKeys = new LangKeys('ru', [\n    new Key('Time difference', 'Разница во времени'),\n    new PluralKey('{count} minute', {\n        one: new ParamedKey('{count} minute', '{count} минута', ['count']),\n        some: new ParamedKey('{count} minute', '{count} минуты', ['count']),\n        many: new ParamedKey('{count} minute', '{count} минут', ['count']),\n        none: new Key('{count} minute', 'нет минут')\n    })\n]);\n\nconst keyset = new Keyset('Time', 'src/features/Time/Time.i18n');\nkeyset.addKeysForLang('ru', langKeys);\nawait keyset.save();\nkeyset.langs; // => ['ru']\n```\n\n[RunKit live editor](https://runkit.com/godfreyd/5c347019617b3200145cd068).\n\n### LangKeys.stringify(value, formatName);\n\nConverts a JavaScript object to a special string ready to save on the project's file system.\n\n```js\n/**\n * Converts a JavaScript object to a string.\n *\n * @param {Object} value — The value to convert.\n * @param {string} formatName  — The name of format.\n * @returns {string} — The string to save.\n */\nLangKeys.stringify(value, formatName);\n```\n\n**Example:**\n\n```js\nconst { Keyset, Key, ParamedKey, PluralKey, LangKeys } = require(\"@bem/sdk.keyset\");\nconst langKeys = new LangKeys('ru', [\n    new Key('Time difference', 'Разница во времени'),\n    new PluralKey('{count} minute', {\n        one: new ParamedKey('{count} minute', '{count} минута', ['count']),\n        some: new ParamedKey('{count} minute', '{count} минуты', ['count']),\n        many: new ParamedKey('{count} minute', '{count} минут', ['count']),\n        none: new Key('{count} minute', 'нет минут')\n    })\n]);\nlangKeys.stringify('taburet');\n// => \"export const ru = {\\n'Time difference': 'Разница \"во\" времени',\\n'{count} minute': {\\n'one': '{count} минута',\\n'some': '{count} минуты',\\n'many': '{count} минут',\\n'none': 'нет минут',\\n},\\n};\"\n```\n\n[RunKit live editor](https://runkit.com/godfreyd/5c348b6bee503400124b0523).\n\n### LangKeys.parse(str, formatName)\n\nParses a string, constructing the JavaScript object described by the string.\n\n```js\n/**\n * Parses a string to JavaScript object.\n *\n * @param {Object} str — The string to parse.\n * @param {string} formatName  — The name of format.\n * @returns {string} — The JavaScript object.\n */\nawait LangKeys.parse(str, formatName);\n```\n\n**Example:**\n\n```js\nconst { Keyset, Key, ParamedKey, PluralKey, LangKeys } = require(\"@bem/sdk.keyset\");\nconst { stripIndent } = require('common-tags');\nconst str = stripIndent`\n    export const ru = {\n        'Time difference': 'Разница \"во\" времени',\n        '{count} minute': {\n            'one': '{count} минута',\n            'some': '{count} минуты',\n            'many': '{count} минут',\n            'none': 'нет минут',\n        },\n    };\n`;\n\nconst langKeys = await LangKeys.parse(str, 'taburet');\nlangKeys;\n```\n\n[RunKit live editor](https://runkit.com/godfreyd/5c348f9ec236980012045540).\n\n## License\n\n© 2019 [Yandex](https://yandex.com/company/). Code released under [Mozilla Public License 2.0](LICENSE.txt).\n","readmeFilename":"README.md"}