CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-formatjs--ecma402-abstract

A collection of implementation for ECMAScript abstract operations

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

locale-options.mddocs/

Locale and Options Processing

Core utilities for handling locale lists, extracting options, and processing internationalization configuration. These functions form the foundation for locale-aware applications by providing standardized ways to process locale data and configuration options.

Capabilities

Locale Canonicalization

Canonicalizes locale lists according to ECMA-402 specification.

/**
 * Canonicalizes a locale list according to ECMA-402 specification
 * @param locales - Single locale string or array of locale strings
 * @returns Array of canonicalized locale strings
 */
function CanonicalizeLocaleList(locales?: string | ReadonlyArray<string>): string[];

Usage Examples:

import { CanonicalizeLocaleList } from "@formatjs/ecma402-abstract";

// Single locale
const locales1 = CanonicalizeLocaleList('en-US');
console.log(locales1); // ['en-US']

// Multiple locales
const locales2 = CanonicalizeLocaleList(['en-US', 'fr-FR', 'de-DE']);
console.log(locales2); // ['en-US', 'fr-FR', 'de-DE']

// Undefined input
const locales3 = CanonicalizeLocaleList();
console.log(locales3); // []

Timezone Name Canonicalization

Canonicalizes timezone names using provided timezone data.

/**
 * Canonicalizes timezone names according to IANA timezone database
 * @param tz - Timezone identifier to canonicalize
 * @param options - Timezone data and uppercase links mapping
 * @returns Canonicalized timezone name
 */
function CanonicalizeTimeZoneName(
  tz: string,
  options: {
    zoneNames: readonly string[];
    uppercaseLinks: Record<string, string>;
  }
): string;

Options Object Processing

Coerces options parameter to an object, handling undefined and null values.

/**
 * Coerces options parameter to an object
 * @param options - Options value to coerce
 * @returns Object representation of options, empty object if undefined
 */
function CoerceOptionsToObject<T>(options?: T): T;

Usage Examples:

import { CoerceOptionsToObject } from "@formatjs/ecma402-abstract";

// Valid object
const opts1 = CoerceOptionsToObject({ locale: 'en-US' });
console.log(opts1); // { locale: 'en-US' }

// Undefined
const opts2 = CoerceOptionsToObject();
console.log(opts2); // {}

// Null
const opts3 = CoerceOptionsToObject(null);
console.log(opts3); // {}

Generic Option Extraction

Extracts and validates options from configuration objects with type checking and allowed values validation.

/**
 * Extracts and validates an option from a configuration object
 * @param opts - Options object to extract from
 * @param prop - Property key to extract
 * @param type - Expected type ('string' or 'boolean')
 * @param values - Allowed values for the option
 * @param fallback - Fallback value if option is undefined
 * @returns Extracted option value or fallback
 */
function GetOption<T extends object, K extends keyof T, F>(
  opts: T,
  prop: K,
  type: 'string' | 'boolean',
  values: readonly T[K][] | undefined,
  fallback: F
): Exclude<T[K], undefined> | F;

Usage Examples:

import { GetOption } from "@formatjs/ecma402-abstract";

const options = { style: 'currency', currency: 'USD', useGrouping: true };

// String option with allowed values
const style = GetOption(
  options,
  'style',
  'string',
  ['decimal', 'currency', 'percent'],
  'decimal'
);
console.log(style); // 'currency'

// Boolean option
const grouping = GetOption(
  options,
  'useGrouping',
  'boolean',
  undefined,
  false
);
console.log(grouping); // true

// Missing option with fallback
const notation = GetOption(
  options,
  'notation',
  'string',
  ['standard', 'scientific'],
  'standard'
);
console.log(notation); // 'standard'

Options Object Validation

Validates that options parameter is an object, throwing TypeError if not.

/**
 * Validates and returns options object, throws TypeError if not object
 * @param options - Options to validate
 * @returns Validated options object
 * @throws TypeError if options is not an object
 */
function GetOptionsObject<T extends object>(options?: T): T;

Number Option Extraction

Extracts and validates number options with range checking.

/**
 * Extracts and validates a number option with range checking
 * @param options - Options object containing the number property
 * @param property - Property key to extract
 * @param minimum - Minimum allowed value
 * @param maximum - Maximum allowed value
 * @param fallback - Fallback value if property is undefined
 * @returns Extracted number value or fallback
 */
function GetNumberOption<T extends object, K extends keyof T, F extends number | undefined>(
  options: T,
  property: K,
  minimum: number,
  maximum: number,
  fallback: F
): F extends number ? number : number | undefined;

Usage Examples:

import { GetNumberOption } from "@formatjs/ecma402-abstract";

const options = { minimumFractionDigits: 2, maximumFractionDigits: 4 };

// Extract number with range validation
const minDigits = GetNumberOption(
  options,
  'minimumFractionDigits',
  0,
  20,
  0
);
console.log(minDigits); // 2

// Extract with fallback
const signDigits = GetNumberOption(
  options,
  'minimumSignificantDigits',
  1,
  21,
  undefined
);
console.log(signDigits); // undefined

Default Number Option Processing

Handles default number option processing with range validation for direct values.

/**
 * Processes a default number option with range validation
 * @param inputVal - Input value to process
 * @param min - Minimum allowed value
 * @param max - Maximum allowed value
 * @param fallback - Fallback value if input is invalid
 * @returns Processed number value or fallback
 */
function DefaultNumberOption<F extends number | undefined>(
  inputVal: unknown,
  min: number,
  max: number,
  fallback: F
): F extends number ? number : number | undefined;

String or Boolean Option Extraction

Handles string or boolean option extraction with special true/false value handling.

/**
 * Extracts string or boolean option with special value handling
 * @param opts - Options object
 * @param prop - Property key to extract
 * @param values - Allowed string values
 * @param trueValue - Value to return when option is true
 * @param falsyValue - Value to return when option is false/undefined
 * @param fallback - Fallback value
 * @returns Extracted option value, boolean equivalent, or fallback
 */
function GetStringOrBooleanOption<T extends object, K extends keyof T>(
  opts: T,
  prop: K,
  values: T[K][] | undefined,
  trueValue: T[K] | boolean,
  falsyValue: T[K] | boolean,
  fallback: T[K] | boolean
): T[K] | boolean;

Locale Support

Returns array of supported locales from requested list based on available locales.

/**
 * Returns supported locales from requested list
 * @param availableLocales - Set of available locale identifiers
 * @param requestedLocales - Array of requested locale identifiers
 * @param options - Locale matching options
 * @returns Array of supported locale identifiers
 */
function SupportedLocales(
  availableLocales: Set<string>,
  requestedLocales: string[],
  options?: {
    localeMatcher?: 'best fit' | 'lookup';
  }
): string[];

Usage Examples:

import { SupportedLocales } from "@formatjs/ecma402-abstract";

const available = new Set(['en-US', 'fr-FR', 'de-DE', 'ja-JP']);
const requested = ['en-GB', 'en-US', 'fr-FR', 'es-ES'];

const supported = SupportedLocales(available, requested);
console.log(supported); // ['en-US', 'fr-FR']

// With lookup matcher
const supported2 = SupportedLocales(available, requested, {
  localeMatcher: 'lookup'
});
console.log(supported2); // ['en-US', 'fr-FR']

docs

index.md

locale-options.md

mathematical.md

number-formatting.md

utilities.md

validation.md

tile.json