import { Assert, text } from '@rsdk/common'; import type { PropertyParser } from '../../types'; export class ArrayParser implements PropertyParser { constructor( private readonly singleValueParser: PropertyParser, private readonly options = { separator: ',' }, ) {} type(): string { return `(array)${this.singleValueParser.type()}`; } description(): string { return text` Extracts array of values. If raw value is a string <${this.options.separator}> will used as separator. Each value: ${this.singleValueParser.description()} `; } parse(value: unknown): T[] { if (Array.isArray(value)) { return value.map((x) => this.singleValueParser.parse(x)); } Assert.isString(value); return value .split(this.options.separator) .map((x) => this.singleValueParser.parse(x)); } }