UNPKG

sanity

Version:

Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches

42 lines (37 loc) 1.01 kB
import {type InternalSearchParam} from '../types' export function parseScopedParams(params: [key: string, value: string][]): InternalSearchParam[] { return params.map(([key, value]) => [parse(key), value]) } const OPEN = 1 const CLOSED = 0 function parse(str: string) { const result = [] let i = 0 let state = CLOSED while (i < str.length) { const nextBracketIdx = str.indexOf('[', i) if (nextBracketIdx === -1) { result.push(str.slice(i, str.length)) break } if (state === OPEN) { throw new Error('Nested brackets not supported') } state = OPEN if (nextBracketIdx > i) { result.push(str.slice(i, nextBracketIdx)) i = nextBracketIdx } const nextClosing = str.indexOf(']', nextBracketIdx) if (nextClosing === -1) { if (state === OPEN) { throw new Error('Unclosed bracket') } break } state = CLOSED result.push(str.slice(i + 1, nextClosing)) i = nextClosing + 1 } return result }