UNPKG

cosmos-db-repositories

Version:
59 lines (58 loc) 1.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.inferQueryValue = void 0; const parseProperties = (properties) => { const matchFields = {}; if (!properties || !properties.length) { return matchFields; } for (let i = 0; i < properties.length; i++) { const tokens = properties[i].split(','); for (let j = 0; j < tokens.length; j++) { const token = tokens[j]; const [name, value] = token.split(':'); matchFields[name] = inferQueryValue(value); } } return matchFields; }; const parse = (query, headers) => { // pageable const pageIndex = Math.max(1, Number.parseInt((query.get('page') || '1'))); const rowsPerPage = Number.parseInt((query.get('limit') || '25')); const continuationToken = headers.get('x-ms-continuation'); const orderBy = query.get('sort'); const properties = parseProperties(query.getAll('p')); const searchValue = (query.get('q') || '').toLowerCase(); return { pageable: { rowsPerPage, pageIndex, continuationToken }, properties, orderBy, searchValue }; }; /** * Infers the type of a single query parameter value. * Supports JSON object, number, boolean, date, and string. */ function inferQueryValue(value) { if (value == null) return undefined; try { const parsed = JSON.parse(value); if (typeof parsed === 'object' && parsed !== null) { return parsed; } } catch (_) { } if (value === 'true') return true; if (value === 'false') return false; if (!isNaN(Number(value)) && value.trim() !== '') return Number(value); if (!isNaN(Date.parse(value))) return new Date(value); return value; } exports.inferQueryValue = inferQueryValue; exports.default = { parseProperties, parse };