{"id":19988780,"url":"https://github.com/e22m4u/js-format","last_synced_at":"2025-05-04T08:32:07.680Z","repository":{"id":233559669,"uuid":"773019230","full_name":"e22m4u/js-format","owner":"e22m4u","description":"The string interpolation utility for JavaScript","archived":false,"fork":false,"pushed_at":"2024-10-19T10:58:09.000Z","size":63,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-11-07T18:08:31.796Z","etag":null,"topics":["error","esm","format","interpolation","javascript","sprintf","typescript"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/e22m4u.png","metadata":{"files":{"readme":"README-ru.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-16T14:18:19.000Z","updated_at":"2024-10-19T10:58:07.000Z","dependencies_parsed_at":"2024-04-16T18:24:34.020Z","dependency_job_id":"dac53f94-d07b-4193-af03-1d99505363d5","html_url":"https://github.com/e22m4u/js-format","commit_stats":{"total_commits":99,"total_committers":2,"mean_commits":49.5,"dds":"0.23232323232323238","last_synced_commit":"5d90d61e3ff33eb9c8398c0c0dddf9db81342629"},"previous_names":["e22m4u/js-format"],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/e22m4u%2Fjs-format","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/e22m4u%2Fjs-format/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/e22m4u%2Fjs-format/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/e22m4u%2Fjs-format/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/e22m4u","download_url":"https://codeload.github.com/e22m4u/js-format/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224172746,"owners_count":17267987,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["error","esm","format","interpolation","javascript","sprintf","typescript"],"created_at":"2024-11-13T04:44:08.273Z","updated_at":"2024-11-13T04:44:08.997Z","avatar_url":"https://github.com/e22m4u.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## @e22m4u/js-format\n\n*[English](README.md) | Русский*\n\nУтилита интерполяции строк для JavaScript.\n\n- стандартные спецификаторы `%s`, `%d` и `%j` (см. [`util.format`](https://nodejs.org/api/util.html#utilformatformat-args))\n- `%v` вывод примитивного значения или имени конструктора\n- `%l` вывод элементов массива через запятую `\"foo\", 10, true`\n\nДополнительно:\n- встроенный класс `Errorf` с интерполяцией сообщения об ошибке\n\n## Мотивация\n\nПри выводе сообщения об ошибке может возникнуть потребность\nвключения некоторых значений в строку сообщения. В этом случае\nвозникает проблема, когда невозможно точно определить тип\nвыводимого значения, так как стандартный спецификатор `%s`\nодинаково обрабатывает строки, числа и другие типы.\n\n```js\nimport {format} from 'util';\n\nconsole.log(format(`A boolean required, but %s given.`, 8));\nconsole.log(format(`A boolean required, but %s given.`, '8'));\n// \u003e A boolean required, but 8 given.\n// \u003e A boolean required, but 8 given.\n```\n\nВ примере выше строка `'8'` и число `8` выводятся одинаково.\nПохожая проблема возникает при выводе объектов.\n\n```js\nimport {format} from 'util';\n\nconsole.log(format(`A boolean required, but %s given.`, new Date()));\nconsole.log(format(`A boolean required, but %s given.`, 'Oct 18 2024 13:04:30'));\n// \u003e A boolean required, but Oct 18 2024 13:04:30 given.\n// \u003e A boolean required, but Oct 18 2024 13:04:30 given.\n```\n\nДанный модуль расширяет стандартные спецификаторы дополнительным\n`%v` и `%l`, которые оборачивают строки в кавычки, а для объектов\nвыводят имя конструктора.\n\n```js\n// import {format} from 'util';\nimport {format} from '@e22m4u/js-format'; // заменяем пакет \"util\"\n\nconsole.log(format(`A boolean required, but %v given.`, 8));\nconsole.log(format(`A boolean required, but %v given.`, '8'));\n// \u003e A boolean required, but 8 given.\n// \u003e A boolean required, but \"8\" given.\n\nconsole.log(format(`A boolean required, but %v given.`, new Date()));\nconsole.log(format(`A boolean required, but %v given.`, 'Oct 18 2024 13:04:30'));\n// \u003e A boolean required, but Date (instance) given.\n// \u003e A boolean required, but \"Oct 18 2024 13:04:30\" given.\n```\n\nПодробнее о новых спецификаторах см. в разделе\n[Спецификаторы](#Спецификаторы).\n\n## Установка\n\n```bash\nnpm install @e22m4u/js-format\n```\n\nМодуль поддерживает ESM и CommonJS стандарты.\n\n*ESM*\n\n```js\nimport {format} from '@e22m4u/js-format';\n```\n\n*CommonJS*\n\n```js\nconst {format} = require('@e22m4u/js-format');\n```\n\n## Спецификаторы\n\nМетод `format` возвращает отформатированную строку, используя\nпервый аргумент как *printf*-подобный шаблон, который может\nсодержать ноль или более спецификаторов. Каждый спецификатор\nзаменяется преобразованным значением из соответствующего\nаргумента.\n\n| specifier | description                                  |\n|-----------|----------------------------------------------|\n| `%s`      | использует `String` для конвертации значения |\n| `%d`      | использует `Number` для конвертации значения |\n| `%j`      | представление значения в виде JSON           |\n| `%v`      | см. ниже                                     |\n| `%l`      | см. ниже                                     |\n\n### %v\n\nСтроки оборачиваются в кавычки, остальные примитивы приводятся\nк строке, а для более сложных типов выводится имя конструктора.\n\n```js\nformat('It is %v', 'foo');        // It is \"foo\"\nformat('It is %v', '');           // It is \"\"\nformat('It is %v', 10);           // It is 10\nformat('It is %v', 0);            // It is 0\nformat('It is %v', NaN);          // It is NaN\nformat('It is %v', Infinity);     // It is Infinity\nformat('It is %v', true);         // It is true\nformat('It is %v', false);        // It is false\nformat('It is %v', {foo: 'bar'}); // It is Object\nformat('It is %v', new Date());   // It is Date\nformat('It is %v', new Map());    // It is Map\nformat('It is %v', () =\u003e 10);     // It is Function\nformat('It is %v', undefined);    // It is undefined\nformat('It is %v', null);         // It is null\n```\n\nСпецификатор `%v` проектировался для вывода значений в сообщениях\nоб ошибке, когда важно иметь представление об их типах. При этом,\nвывод содержимого объекта может быть избыточен для такой задачи.\nПо этой причине, объекты приводятся к имени конструктора, что\nпозволяет относительно точно определить тип выводимого значения.\n\n```js\nclass MyClass {}\n\nformat('It is %v', 'MyClass');     // It is \"MyClass\"\nformat('It is %v', MyClass);       // It is MyClass\nformat('It is %v', new MyClass()); // It is MyClass (instance)\n```\n\n### %l\n\nВывод элементов массива через запятую.\n\n```js\nformat('An array of %l', ['foo', 10, true]);\n// An array of \"foo\", 10, true\n```\n\nЭлементы массива приводятся к строке по логике\nспецификатора `%v`\n\n## `Errorf`\n\nКонструктор класса `Errorf` передает свои аргументы\nфункции `format` для формирования сообщения об ошибке.\n\nПример:\n\n```js\nimport {Errorf} from '@e22m4u/js-format';\n\nthrow new Errorf(\n  'It requires one of %l, but %v given.',\n  [true, false, 'y', 'n'],\n  new Map(),\n);\n// Error: It requires one of true, false, \"y\", \"n\", but Map given.\n```\n\n## Тесты\n\n```bash\nnpm run test\n```\n\n## Лицензия\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fe22m4u%2Fjs-format","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fe22m4u%2Fjs-format","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fe22m4u%2Fjs-format/lists"}