{"_id":"icu-validator","_rev":"2-6c13be4f970b650d112f7198c96e3a08","name":"icu-validator","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"icu-validator","version":"0.1.0","description":"Check if a text conforms to ICU format - supports individual string, JSON files or folders contaning JSON files","keywords":["i18n","internationalization","l10n","localization","pseudo-translation","icu-validation","icu","icu-messageformat","i18next","formatjs","intl-messageformat"],"repository":{"type":"git","url":"git+https://github.com/diptarag/icu-validator.git"},"bugs":{"url":"https://github.com/diptarag/icu-validator"},"author":{"name":"Diptarag Mukherjee","email":"diptarag@gmail.com"},"license":"MIT","type":"module","main":"dist/icu-validator.cjs","module":"dist/icu-validator.mjs","types":"dist/index.d.ts","scripts":{"build":"rollup -c","start":"rollup -cw","check-types":"tsc --noEmit","check-formatting":"prettier --check src/**/*.ts","format":"prettier --write src/**/*.ts","test":"yarn run check-formatting && yarn run check-types"},"devDependencies":{"@rollup/plugin-commonjs":"^25.0.4","@rollup/plugin-node-resolve":"^15.2.1","@types/node":"^20.6.2","prettier":"^3.0.3","rollup":"^3.29.2","rollup-plugin-typescript2":"^0.35.0","typescript":"^5.2.2"},"dependencies":{"@formatjs/icu-messageformat-parser":"^2.6.2","kleur":"^4.1.5"},"gitHead":"c45e05387525c828255613097e82cefad15b687c","homepage":"https://github.com/diptarag/icu-validator#readme","_id":"icu-validator@0.1.0","_nodeVersion":"18.4.0","_npmVersion":"8.12.1","dist":{"integrity":"sha512-R/jriftMA99GTQAkc5HDlKWHhg4dswSO5M7t3XAoCPk6D2AUvEY42MnUIyD4obhoev44Es3wEYiLkzPsc/ucJg==","shasum":"2fd009982954f682b72572bd2a24e7c6461c97d7","tarball":"https://registry.npmjs.org/icu-validator/-/icu-validator-0.1.0.tgz","fileCount":10,"unpackedSize":239948,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICJyWW4R1mEg4zA4ukbPbxfr78LYuPeTq9kXmqegH3biAiBOCcAnzj8cbWQUYa0kOV8zg56dHeY02nsttMx+GWimIw=="}]},"_npmUser":{"name":"diptarag","email":"diptarag@gmail.com"},"directories":{},"maintainers":[{"name":"diptarag","email":"diptarag@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/icu-validator_0.1.0_1695755620858_0.24581956657644977"},"_hasShrinkwrap":false},"0.1.1":{"name":"icu-validator","version":"0.1.1","description":"Check if a text conforms to ICU format - supports individual string, JSON files or folders contaning JSON files","keywords":["i18n","internationalization","l10n","localization","pseudo-translation","icu-validation","icu","icu-messageformat","i18next","formatjs","intl-messageformat"],"repository":{"type":"git","url":"git+https://github.com/diptarag/icu-validator.git"},"bugs":{"url":"https://github.com/diptarag/icu-validator"},"author":{"name":"Diptarag Mukherjee","email":"diptarag@gmail.com"},"license":"MIT","type":"module","main":"dist/icu-validator.cjs","module":"dist/icu-validator.mjs","types":"dist/index.d.ts","scripts":{"build":"rollup -c","start":"rollup -cw","check-types":"tsc --noEmit","check-formatting":"prettier --check src/**/*.ts","format":"prettier --write src/**/*.ts","test":"yarn run check-formatting && yarn run check-types"},"devDependencies":{"@rollup/plugin-commonjs":"^25.0.4","@rollup/plugin-node-resolve":"^15.2.1","@types/node":"^20.6.2","prettier":"^3.0.3","rollup":"^3.29.2","rollup-plugin-typescript2":"^0.35.0","typescript":"^5.2.2"},"dependencies":{"@formatjs/icu-messageformat-parser":"^2.6.2","kleur":"^4.1.5"},"_id":"icu-validator@0.1.1","gitHead":"db4fec6f8fb4a253c3a9dd4022380dd3d2f08c75","homepage":"https://github.com/diptarag/icu-validator#readme","_nodeVersion":"21.1.0","_npmVersion":"10.2.0","dist":{"integrity":"sha512-MMP4rBXOyrtWMuCv8XklD+iP7jBn4fe82SbNKg0TZNhICo7YYsEjFUMfXyMJm9jtSrxOAXtWnC/IEk28O8yZig==","shasum":"b232a7d378f4c0c5cb2465ceafd8f5b5a61a1e71","tarball":"https://registry.npmjs.org/icu-validator/-/icu-validator-0.1.1.tgz","fileCount":10,"unpackedSize":242884,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCh5+x1YZKv+V8dP0GUy0x/UiPaQtKgds+AXF2N/virwwIgU3r9gf9Zj8nOAVnn2oeayx0o8FLfhpL5sx5Ha33kSYs="}]},"_npmUser":{"name":"diptarag","email":"diptarag@gmail.com"},"directories":{},"maintainers":[{"name":"diptarag","email":"diptarag@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/icu-validator_0.1.1_1701336671305_0.7069838352196276"},"_hasShrinkwrap":false},"0.1.2":{"name":"icu-validator","version":"0.1.2","description":"Check if a text conforms to ICU format - supports individual string, JSON files or folders contaning JSON files","keywords":["i18n","internationalization","l10n","localization","pseudo-translation","icu-validation","icu","icu-messageformat","i18next","formatjs","intl-messageformat"],"repository":{"type":"git","url":"git+https://github.com/diptarag/icu-validator.git"},"bugs":{"url":"https://github.com/diptarag/icu-validator"},"author":{"name":"Diptarag Mukherjee","email":"diptarag@gmail.com"},"license":"MIT","type":"module","main":"dist/icu-validator.cjs","module":"dist/icu-validator.mjs","types":"dist/index.d.ts","scripts":{"build":"rollup -c","start":"rollup -cw","check-types":"tsc --noEmit","check-formatting":"prettier --check src/**/*.ts","format":"prettier --write src/**/*.ts","test":"yarn run check-formatting && yarn run check-types"},"devDependencies":{"@rollup/plugin-commonjs":"^25.0.4","@rollup/plugin-node-resolve":"^15.2.1","@types/node":"^20.6.2","prettier":"^3.0.3","rollup":"^3.29.2","rollup-plugin-typescript2":"^0.35.0","typescript":"^5.2.2"},"dependencies":{"@formatjs/icu-messageformat-parser":"^2.6.2","kleur":"^4.1.5"},"_id":"icu-validator@0.1.2","gitHead":"ef43e8e95ff28be6a5a04d63c5865b91879c91c1","homepage":"https://github.com/diptarag/icu-validator#readme","_nodeVersion":"21.1.0","_npmVersion":"10.2.0","dist":{"integrity":"sha512-XwwAepHs1DyAK87OMypcpB5LbPs+tujpwLiJPW1Zk01CLHix3MlKZrMai1y5CK16eRQDYUi3N4MZCO50/K6Cbw==","shasum":"afa930aafb623da27b378ed2b8532faa66cc804e","tarball":"https://registry.npmjs.org/icu-validator/-/icu-validator-0.1.2.tgz","fileCount":10,"unpackedSize":244119,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpDV0zltorIxu7LwjM26NefqOZtUAb2fYlzf02sKj9TAIhALq6xDpai+Z0Dt/rzkJ4FDZutHfbVaU8Dhv673D0/yQw"}]},"_npmUser":{"name":"diptarag","email":"diptarag@gmail.com"},"directories":{},"maintainers":[{"name":"diptarag","email":"diptarag@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/icu-validator_0.1.2_1701669210201_0.6195150290401363"},"_hasShrinkwrap":false}},"time":{"created":"2023-09-26T19:13:40.858Z","0.1.0":"2023-09-26T19:13:41.168Z","modified":"2023-12-04T05:53:30.553Z","0.1.1":"2023-11-30T09:31:11.480Z","0.1.2":"2023-12-04T05:53:30.363Z"},"maintainers":[{"name":"diptarag","email":"diptarag@gmail.com"}],"description":"Check if a text conforms to ICU format - supports individual string, JSON files or folders contaning JSON files","homepage":"https://github.com/diptarag/icu-validator#readme","keywords":["i18n","internationalization","l10n","localization","pseudo-translation","icu-validation","icu","icu-messageformat","i18next","formatjs","intl-messageformat"],"repository":{"type":"git","url":"git+https://github.com/diptarag/icu-validator.git"},"author":{"name":"Diptarag Mukherjee","email":"diptarag@gmail.com"},"bugs":{"url":"https://github.com/diptarag/icu-validator"},"license":"MIT","readme":"# icu-validator\n\nValidate a data source if all strings in the data source conforms to ICU standard.\nSupports -\n* Individual text\n* Object of key value pair where value corresponds to texts\n* A JSON file path\n* A directory path contaning JSON files\n\n## Usage\n\nInstall using yarn -\n```sh\nyarn add icu-validator -D\n```\nor using npm\n```sh\nnpm install icu-validator --save-dev\n```\n\n### Import or require the module\n\n```javascript\n// Using ESM\nimport { validate, validateFile, validateDirectory } from 'icu-validator';\n\n// Using CJS\nconst { validate, validateFile, validateDirectory } = require('icu-validator');\n```\n\n### Basic use case - validating a string\n\n```javascript\nconst { validate } = require('icu-validator');\n\nconst validationResult = validate('Hello {{name}}, how are you?');\n/**\n * {\n *  \"__icu_validator_error\":true,\n *  \"result\": {\n *    \"errorMessage\":\"MALFORMED_ARGUMENT\",\n *    \"originalMessage\":\"Hello {{name}}, how are you?\",\n *    \"location\": {\n *      \"start\": { \"offset\":6,\"line\":1,\"column\":7 },\n *      \"end\": { \"offset\":7,\"line\":1,\"column\":8 }\n *    }\n *  }\n * }\n **/\n\nconst validationResult = validate('Hello {name}, how are you?');\n/**\n * { \"__icu_validator_error\": false }\n **/\n```\n\nYou can pretty print the errors by passing a flag ```prettyPrint: true```\n```javascript\nconst validationResult = validate('Hello {{name}}, how are you?', { prettyPrint: true });\n```\n\n### Validating an object of key value pairs\n\n```javascript\nconst obj = {\n  \"welcome\": \"Hello {name}, how are you?\",\n  \"examples\": {\n    \"pluralization\": \"Hi {name}, you have {{numProducts, plural, =0 {no items} =1 {one item} other {# items}} in cart\"\n  }\n};\n\nvalidate(obj, { prettyPrint: true });\n\n/**\nInvalid ICU string :- Hi {name}, you have {{numProducts, plural, =0 {no items} =1 {one item} other {# items}} in cart\nObject path :- examples.pluralization\nError :- MALFORMED_ARGUMENT\nLocation :- {\"start\":{\"offset\":20,\"line\":1,\"column\":21},\"end\":{\"offset\":21,\"line\":1,\"column\":22}}\n**/\n```\n\n### Validating a JSON file or a directory containing many JSON files\n\nValidate method does accept a file or directory path as first argument. But one very important thing to keep in mind - **the validate method is completely sync**, so all file & directory read operations will be sync.\nIt is recommended to use dedicated ```validateFile``` and ```validateDirectory``` async methods.\n\n```javascript\nvalidateFile(filePath).then((result) => {\n  console.log(JSON.stringify(result));\n});\n\nvalidateDirectory(directoryPath).then((result) => {\n  console.log(JSON.stringify(result));\n});\n```\n\nTry ```prettyPrint: true``` if you want to show the errors on screen\n\n## Options\n```validate```, ```validateFile``` and ```validateDirectory``` take a 2nd argument - ```options``` to customize the output format and validation rules/\n\n```javascript\nvalidate(source: string | object, options: object)\nvalidateFile(filePath: string, options: object)\nvalidateDirectory(directoryPath: string, options: object)\n```\n\nOptions include -\n\n### `prettyPrint` - default (`false`)\nPrint the validation result and errors in console.\n\n### `verbose` - default (`false`)\nProvide complete execution logs when printing the results.\n\n### `ignoreTransTag` - default (`false`)\nIf you are using `react-i18next` with ICU, you will encounter situations where you need to externalize HTML elements. For react-i18next, the recommended method is [Trans component](https://react.i18next.com/latest/trans-component). The externalized string resembles a format - ```Please click <0>here</0>```. These are usually termed as invalid strings. Use this option if you want to ignore such tags from validation rule.\n\n### `parseOptions`\nUnder the hood, ```icu-validator``` uses ```formatjs``` parser. You can customize the validation rules by customizing the parser -\n#### ``ignoreTag``\nWhether to treat HTML/XML tags as string literal\n#### ``requiresOtherClause``\nShould ```select```, ```selectordinal```, and ```plural``` arguments always include the ```other``` case clause\n#### ``shouldParseSkeletons``\nWhether to parse number/datetime skeleton into Intl.NumberFormatOptions and Intl.DateTimeFormatOptions, respectively.\n#### ``captureLocation``\nCapture location info in AST\n#### ``locale``\nInstance of Intl.Locale to resolve locale-dependent skeleton\n\n","readmeFilename":"README.md"}