Skip to main content

A matching development SDK with commonLineSymbols also supports shared planar line symbols, including true per-glyph curved geometry, target ownership, joint icon/text groups and shared budgets. Earlier point-only scope and pending line-symbol notes below are superseded for this bounded subset. Complex shaping, tilted/globe/terrain placement and complete road stitching remain pending.

Nested value conversion in join

Common style expressions already provide split and join. This change fixes nested JSON array/object conversion in join without changing its syntax.

['join',['literal',[['a','b'],['c',null],{}]],'|']
// a,b|c,|[object Object]
['join',['literal',[null,false,3,'x']],'|']
// |false|3|x

The top-level array uses the chosen separator; nested arrays use commas. Null becomes empty text,booleans true/false,numbers retain existing ECMAScript decimal/exponent thresholds,and plain JSON objects becomeobject Object. Object conversion hooks/functions are not executed,and no JavaScript runtime is added.

Existing4096 UTF-8 output bytes and8192 shared evaluation steps remain. Recursive visits count toward the same steps; depths above32 fail with RESOURCE_LIMIT. Output is checked before appending instead of allocating oversized results; no truncation occurs. Constant type/arity errors fail before mutation; bad feature values use existing style warnings/fallbacks.

Split stays unchanged: adjacent/trailing empty fields are preserved and an empty separator uses Unicode scalar values,as in existing SqsMap behavior(this differs from JS UTF-16 splitting of surrogate pairs). Join strings can feed common text/filter/derived values,while split arrays compose with at/length. URL basemap compilation,format/collator/complex shaping/line placement and remaining style work stay in the parent task; this does not claim complete MapLibre compatibility.

Theidentical nine-check script andcomplete HTML exercise dynamic radius queries,nested feature state and source identity,with actual red pixels selected only by the corrected join result. Models cover values,types,work and output limits. Run within the complete matching SDK directory.

Syntax followsMapLibre split/join; implementation uses SqsMap's common core.