messageformat-number-skeleton
Version:
A parser & formatter for ICU NumberFormat skeleton strings & patterns
71 lines (70 loc) • 2.03 kB
JavaScript
/**
* Base class for errors. In addition to a `code` and a human-friendly
* `message`, may also includes the token `stem` as well as other fields.
*
* @public
*/
export class NumberFormatError extends Error {
/** @internal */
constructor(code, msg) {
super(msg);
this.code = code;
}
}
/** @internal */
export class BadOptionError extends NumberFormatError {
constructor(stem, opt) {
super('BAD_OPTION', `Unknown ${stem} option: ${opt}`);
this.stem = stem;
this.option = opt;
}
}
/** @internal */
export class BadStemError extends NumberFormatError {
constructor(stem) {
super('BAD_STEM', `Unknown stem: ${stem}`);
this.stem = stem;
}
}
/** @internal */
export class MaskedValueError extends NumberFormatError {
constructor(type, prev) {
super('MASKED_VALUE', `Value for ${type} is set multiple times`);
this.type = type;
this.prev = prev;
}
}
/** @internal */
export class MissingOptionError extends NumberFormatError {
constructor(stem) {
super('MISSING_OPTION', `Required option missing for ${stem}`);
this.stem = stem;
}
}
/** @internal */
export class PatternError extends NumberFormatError {
constructor(char, msg) {
super('BAD_PATTERN', msg);
this.char = char;
}
}
/** @internal */
export class TooManyOptionsError extends NumberFormatError {
constructor(stem, options, maxOpt) {
const maxOptStr = maxOpt > 1 ? `${maxOpt} options` : 'one option';
super('TOO_MANY_OPTIONS', `Token ${stem} only supports ${maxOptStr} (got ${options.length})`);
this.stem = stem;
this.options = options;
}
}
/** @internal */
export class UnsupportedError extends NumberFormatError {
constructor(stem, source) {
super('UNSUPPORTED', `The stem ${stem} is not supported`);
this.stem = stem;
if (source) {
this.message += ` with value ${source}`;
this.source = source;
}
}
}