A collection of utility libraries used by other Facebook JS projects including React and Relay
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
International text processing utilities for Unicode handling, bidirectional text, CJK languages, and localization support.
General Unicode text processing and character handling utilities.
const UnicodeUtils = require('fbjs/lib/UnicodeUtils');
const UnicodeUtilsExtra = require('fbjs/lib/UnicodeUtilsExtra');
/**
* General Unicode utilities for text processing
*/
const UnicodeUtils: {
/**
* Checks if character is a Unicode surrogate pair
* @param char - Character to check
* @returns True if character is part of surrogate pair
*/
isSurrogatePair(char: string): boolean;
/**
* Gets Unicode code point for character
* @param char - Character to get code point for
* @returns Unicode code point number
*/
getCodePoint(char: string): number;
/**
* Converts code point to character
* @param codePoint - Unicode code point
* @returns Character string
*/
fromCodePoint(codePoint: number): string;
/**
* Determines character width for display purposes
* @param char - Character to measure
* @returns Width (1 for normal, 2 for wide characters)
*/
getCharacterWidth(char: string): number;
/**
* Checks if character is printable
* @param char - Character to check
* @returns True if character is printable
*/
isPrintable(char: string): boolean;
/**
* Normalizes Unicode string using specified form
* @param str - String to normalize
* @param form - Normalization form (NFC, NFD, NFKC, NFKD)
* @returns Normalized string
*/
normalize(str: string, form?: string): string;
};
/**
* Additional Unicode utilities for advanced text processing
*/
const UnicodeUtilsExtra: {
/**
* Performs advanced Unicode character classification
* @param char - Character to classify
* @returns Object with character properties
*/
classifyCharacter(char: string): {
category: string,
script: string,
block: string,
isLetter: boolean,
isDigit: boolean,
isWhitespace: boolean,
isPunctuation: boolean
};
/**
* Finds word boundaries in Unicode text
* @param text - Text to analyze
* @returns Array of word boundary positions
*/
findWordBoundaries(text: string): Array<number>;
/**
* Segments text into grapheme clusters
* @param text - Text to segment
* @returns Array of grapheme clusters
*/
segmentGraphemes(text: string): Array<string>;
};Utilities for handling bidirectional (RTL/LTR) text layout and processing.
const UnicodeBidi = require('fbjs/lib/UnicodeBidi');
const UnicodeBidiDirection = require('fbjs/lib/UnicodeBidiDirection');
const UnicodeBidiService = require('fbjs/lib/UnicodeBidiService');
/**
* Bidirectional text utilities for RTL/LTR text handling
*/
const UnicodeBidi: {
/**
* Determines text direction for string
* @param text - Text to analyze
* @returns Direction: 'ltr', 'rtl', or 'neutral'
*/
getDirection(text: string): string;
/**
* Applies Unicode Bidirectional Algorithm
* @param text - Text to process
* @param direction - Base direction ('ltr' or 'rtl')
* @returns Object with reordered text and level information
*/
processText(text: string, direction: string): {
text: string,
levels: Array<number>,
runs: Array<{start: number, end: number, level: number}>
};
/**
* Checks if character is strongly RTL
* @param char - Character to check
* @returns True if character has strong RTL directionality
*/
isRTLChar(char: string): boolean;
/**
* Checks if character is strongly LTR
* @param char - Character to check
* @returns True if character has strong LTR directionality
*/
isLTRChar(char: string): boolean;
/**
* Gets bidirectional character type
* @param char - Character to analyze
* @returns Bidi type (L, R, AL, EN, ES, ET, AN, CS, NSM, BN, B, S, WS, ON)
*/
getBidiType(char: string): string;
};
/**
* Constants and utilities for text direction
*/
const UnicodeBidiDirection: {
LTR: 'ltr',
RTL: 'rtl',
NEUTRAL: 'neutral',
/**
* Determines if direction is RTL
* @param direction - Direction string
* @returns True if direction is RTL
*/
isRTL(direction: string): boolean;
/**
* Gets opposite direction
* @param direction - Current direction
* @returns Opposite direction
*/
getOpposite(direction: string): string;
};
/**
* Service for advanced bidirectional text processing
*/
const UnicodeBidiService: {
/**
* Processes mixed RTL/LTR text for display
* @param text - Text with mixed directions
* @param baseDirection - Base text direction
* @returns Processed text with proper ordering
*/
reorderText(text: string, baseDirection: string): string;
/**
* Calculates cursor position mapping for bidi text
* @param text - Bidirectional text
* @param logicalPosition - Logical cursor position
* @returns Visual cursor position
*/
logicalToVisual(text: string, logicalPosition: number): number;
/**
* Converts visual position to logical position
* @param text - Bidirectional text
* @param visualPosition - Visual cursor position
* @returns Logical cursor position
*/
visualToLogical(text: string, visualPosition: number): number;
};Usage Examples:
const UnicodeBidi = require('fbjs/lib/UnicodeBidi');
const UnicodeBidiDirection = require('fbjs/lib/UnicodeBidiDirection');
// Detect text direction
const arabicText = 'مرحبا بالعالم';
const direction = UnicodeBidi.getDirection(arabicText); // 'rtl'
// Mixed language text
const mixedText = 'Hello مرحبا World';
const processed = UnicodeBidi.processText(mixedText, 'ltr');
console.log('Reordered:', processed.text);
// Check character directionality
const isRTL = UnicodeBidi.isRTLChar('ا'); // true (Arabic letter)
const isLTR = UnicodeBidi.isLTRChar('A'); // true (Latin letter)
// Direction utilities
const isRightToLeft = UnicodeBidiDirection.isRTL('rtl'); // true
const opposite = UnicodeBidiDirection.getOpposite('ltr'); // 'rtl'Specialized utilities for Chinese, Japanese, and Korean text processing.
const UnicodeCJK = require('fbjs/lib/UnicodeCJK');
const UnicodeHangulKorean = require('fbjs/lib/UnicodeHangulKorean');
/**
* Utilities for Chinese, Japanese, and Korean text processing
*/
const UnicodeCJK: {
/**
* Checks if character is CJK ideograph
* @param char - Character to check
* @returns True if character is CJK ideograph
*/
isCJKIdeograph(char: string): boolean;
/**
* Checks if character is Hiragana
* @param char - Character to check
* @returns True if character is Hiragana
*/
isHiragana(char: string): boolean;
/**
* Checks if character is Katakana
* @param char - Character to check
* @returns True if character is Katakana
*/
isKatakana(char: string): boolean;
/**
* Checks if character is Hangul
* @param char - Character to check
* @returns True if character is Hangul
*/
isHangul(char: string): boolean;
/**
* Converts between Hiragana and Katakana
* @param text - Text containing Japanese characters
* @param toKatakana - True to convert to Katakana, false for Hiragana
* @returns Converted text
*/
convertKana(text: string, toKatakana: boolean): string;
/**
* Determines script type for CJK text
* @param text - Text to analyze
* @returns Script type: 'han', 'hiragana', 'katakana', 'hangul', 'mixed'
*/
getScript(text: string): string;
/**
* Breaks CJK text into logical segments
* @param text - CJK text to segment
* @returns Array of text segments
*/
segmentText(text: string): Array<string>;
/**
* Checks if text requires CJK-specific line breaking
* @param text - Text to analyze
* @returns True if CJK line breaking rules should be applied
*/
needsCJKLineBreaking(text: string): boolean;
};
/**
* Specialized utilities for Korean Hangul text processing
*/
const UnicodeHangulKorean: {
/**
* Decomposes Hangul syllable into constituent Jamo
* @param syllable - Hangul syllable character
* @returns Object with initial, medial, and final Jamo
*/
decompose(syllable: string): {
initial: string,
medial: string,
final?: string
};
/**
* Composes Jamo into Hangul syllable
* @param initial - Initial consonant Jamo
* @param medial - Medial vowel Jamo
* @param final - Optional final consonant Jamo
* @returns Composed Hangul syllable
*/
compose(initial: string, medial: string, final?: string): string;
/**
* Checks if character is Hangul Jamo
* @param char - Character to check
* @returns True if character is Hangul Jamo
*/
isJamo(char: string): boolean;
/**
* Gets Romanization of Hangul text
* @param hangul - Hangul text to romanize
* @param system - Romanization system ('revised', 'mccune', 'yale')
* @returns Romanized text
*/
romanize(hangul: string, system?: string): string;
/**
* Normalizes Hangul text for comparison
* @param text - Hangul text to normalize
* @returns Normalized text
*/
normalize(text: string): string;
/**
* Sorts array of Korean text using proper collation
* @param texts - Array of Korean text strings
* @returns Sorted array
*/
sort(texts: Array<string>): Array<string>;
};Usage Examples:
const UnicodeCJK = require('fbjs/lib/UnicodeCJK');
const UnicodeHangulKorean = require('fbjs/lib/UnicodeHangulKorean');
// Detect CJK character types
const chinese = '汉字';
const japanese = 'ひらがな';
const korean = '한글';
console.log(UnicodeCJK.isCJKIdeograph('汉')); // true
console.log(UnicodeCJK.isHiragana('ひ')); // true
console.log(UnicodeCJK.isHangul('한')); // true
// Convert between Japanese scripts
const hiragana = 'ひらがな';
const katakana = UnicodeCJK.convertKana(hiragana, true); // 'ヒラガナ'
// Korean Hangul processing
const syllable = '한';
const decomposed = UnicodeHangulKorean.decompose(syllable);
console.log(decomposed); // { initial: 'ㅎ', medial: 'ㅏ', final: 'ㄴ' }
const composed = UnicodeHangulKorean.compose('ㅎ', 'ㅏ', 'ㄴ'); // '한'
const romanized = UnicodeHangulKorean.romanize('안녕하세요'); // 'annyeonghaseyo'Text tokenization utilities for internationalization.
const TokenizeUtil = require('fbjs/lib/TokenizeUtil');
/**
* Text tokenization utilities
*/
const TokenizeUtil: {
/**
* Gets punctuation regex pattern for tokenization
* @returns Regular expression pattern string for punctuation
*/
getPunctuation(): string;
/**
* Tokenizes text into words and punctuation
* @param text - Text to tokenize
* @param locale - Optional locale for language-specific rules
* @returns Array of tokens
*/
tokenize(text: string, locale?: string): Array<{
type: 'word' | 'punctuation' | 'whitespace',
value: string,
start: number,
end: number
}>;
/**
* Checks if character is word character in given locale
* @param char - Character to check
* @param locale - Locale for character classification
* @returns True if character is word character
*/
isWordChar(char: string, locale?: string): boolean;
};Localization and internationalization utilities.
const Locale = require('fbjs/lib/Locale');
/**
* Locale utilities and constants for internationalization
*/
const Locale: {
/**
* Gets current locale
* @returns Current locale string (e.g., 'en-US', 'ar-SA')
*/
getCurrent(): string;
/**
* Sets current locale
* @param locale - Locale string to set
*/
setCurrent(locale: string): void;
/**
* Checks if locale is right-to-left
* @param locale - Locale string to check
* @returns True if locale uses RTL writing direction
*/
isRTL(locale: string): boolean;
/**
* Gets language code from locale
* @param locale - Full locale string
* @returns Language code (e.g., 'en' from 'en-US')
*/
getLanguage(locale: string): string;
/**
* Gets region code from locale
* @param locale - Full locale string
* @returns Region code (e.g., 'US' from 'en-US')
*/
getRegion(locale: string): string;
/**
* Formats locale string
* @param language - Language code
* @param region - Region code
* @returns Formatted locale string
*/
format(language: string, region?: string): string;
/**
* Gets supported locales
* @returns Array of supported locale strings
*/
getSupported(): Array<string>;
/**
* Validates locale string format
* @param locale - Locale string to validate
* @returns True if locale format is valid
*/
isValid(locale: string): boolean;
};Usage Examples:
const Locale = require('fbjs/lib/Locale');
const TokenizeUtil = require('fbjs/lib/TokenizeUtil');
// Locale operations
const currentLocale = Locale.getCurrent(); // e.g., 'en-US'
const isRTL = Locale.isRTL('ar-SA'); // true
const language = Locale.getLanguage('zh-CN'); // 'zh'
const region = Locale.getRegion('zh-CN'); // 'CN'
// Text tokenization
const punctuation = TokenizeUtil.getPunctuation();
const tokens = TokenizeUtil.tokenize('Hello, world!');
// Returns array of token objects with type, value, start, end