Socket
Socket
Sign inDemoInstall

icu-validator

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

icu-validator

Check if a text conforms to ICU format - supports individual string, JSON files or folders contaning JSON files


Version published
Weekly downloads
21K
decreased by-33.98%
Maintainers
1
Weekly downloads
 
Created
Source

icu-validator

Validate a data source if all strings in the data source conforms to ICU standard. Supports -

  • Individual text
  • Object of key value pair where value corresponds to texts
  • A JSON file path
  • A directory path contaning JSON files

Usage

Install using yarn -

yarn add icu-validator -D

or using npm

npm install icu-validator --save-dev

Import or require the module

// Using ESM
import { validate, validateFile, validateDirectory } from 'icu-validator';

// Using CJS
const { validate, validateFile, validateDirectory } = require('icu-validator');

Basic use case - validating a string

const { validate } = require('icu-validator');

const validationResult = validate('Hello {{name}}, how are you?');
/**
 * {
 *  "__icu_validator_error":true,
 *  "result": {
 *    "errorMessage":"MALFORMED_ARGUMENT",
 *    "originalMessage":"Hello {{name}}, how are you?",
 *    "location": {
 *      "start": { "offset":6,"line":1,"column":7 },
 *      "end": { "offset":7,"line":1,"column":8 }
 *    }
 *  }
 * }
 **/

const validationResult = validate('Hello {name}, how are you?');
/**
 * { "__icu_validator_error": false }
 **/

You can pretty print the errors by passing a flag prettyPrint: true

const validationResult = validate('Hello {{name}}, how are you?', { prettyPrint: true });

Validating an object of key value pairs

const obj = {
  "welcome": "Hello {name}, how are you?",
  "examples": {
    "pluralization": "Hi {name}, you have {{numProducts, plural, =0 {no items} =1 {one item} other {# items}} in cart"
  }
};

validate(obj, { prettyPrint: true });

/**
Invalid ICU string :- Hi {name}, you have {{numProducts, plural, =0 {no items} =1 {one item} other {# items}} in cart
Object path :- examples.pluralization
Error :- MALFORMED_ARGUMENT
Location :- {"start":{"offset":20,"line":1,"column":21},"end":{"offset":21,"line":1,"column":22}}
**/

Validating a JSON file or a directory containing many JSON files

Validate 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. It is recommended to use dedicated validateFile and validateDirectory async methods.

validateFile(filePath).then((result) => {
  console.log(JSON.stringify(result));
});

validateDirectory(directoryPath).then((result) => {
  console.log(JSON.stringify(result));
});

Try prettyPrint: true if you want to show the errors on screen

Options

validate, validateFile and validateDirectory take a 2nd argument - options to customize the output format and validation rules/

validate(source: string | object, options: object)
validateFile(filePath: string, options: object)
validateDirectory(directoryPath: string, options: object)

Options include -

prettyPrint - default (false)

Print the validation result and errors in console.

verbose - default (false)

Provide complete execution logs when printing the results.

ignoreTransTag - default (false)

If 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. 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.

parseOptions

Under the hood, icu-validator uses formatjs parser. You can customize the validation rules by customizing the parser -

ignoreTag

Whether to treat HTML/XML tags as string literal

requiresOtherClause

Should select, selectordinal, and plural arguments always include the other case clause

shouldParseSkeletons

Whether to parse number/datetime skeleton into Intl.NumberFormatOptions and Intl.DateTimeFormatOptions, respectively.

captureLocation

Capture location info in AST

locale

Instance of Intl.Locale to resolve locale-dependent skeleton

Keywords

FAQs

Package last updated on 04 Dec 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc