UNPKG

@mapbox/mapbox-gl-style-spec

Version:

a specification for mapbox gl styles

57 lines (43 loc) 1.51 kB
import { StringType, array, } from '../types'; import type {Expression, SerializedExpression} from '../expression'; import type ParsingContext from '../parsing_context'; import type EvaluationContext from '../evaluation_context'; import type {Type} from '../types'; class Split implements Expression { type: Type; str: Expression; delimiter: Expression; constructor(str: Expression, delimiter: Expression) { this.type = array(StringType); this.str = str; this.delimiter = delimiter; } static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Split | void { if (args.length !== 3) { return context.error(`Expected 2 arguments, but found ${args.length - 1} instead.`); } const str = context.parse(args[1], 1, StringType); const delimiter = context.parse(args[2], 2, StringType); if (!str || !delimiter) return; return new Split(str, delimiter); } evaluate(ctx: EvaluationContext): string[] { const str = (this.str.evaluate(ctx) as string); const delimiter = (this.delimiter.evaluate(ctx) as string); return str.split(delimiter); } eachChild(fn: (_: Expression) => void) { fn(this.str); fn(this.delimiter); } outputDefined(): boolean { return false; } serialize(): SerializedExpression { return ["split", this.str.serialize(), this.delimiter.serialize()]; } } export default Split;