@datocms/rest-client-utils
Version:
Utilities for DatoCMS REST API clients
53 lines • 1.71 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildNormalizedParams = void 0;
const ARRAY_INDEX = '__ARRAY_INDEX__';
function buildKey(path) {
return path.reduce((result, chunk, index) => index === 0
? chunk
: chunk === ARRAY_INDEX
? `${result}[]`
: `${result}[${chunk}]`, '');
}
function serializeValue(value) {
if (typeof value === 'number' || typeof value === 'string') {
return value.toString();
}
if (value === true) {
return 'true';
}
if (value === false) {
return 'false';
}
throw `Don't know how to serialize param value ${JSON.stringify(value)}`;
}
function buildNormalizedParams(value, path = []) {
const result = [];
if (typeof value === 'number' ||
typeof value === 'string' ||
typeof value === 'boolean') {
result.push([buildKey(path), serializeValue(value)]);
}
else if (typeof value === 'object') {
if (Array.isArray(value)) {
for (const innerValue of value) {
for (const param of buildNormalizedParams(innerValue, [
...path,
ARRAY_INDEX,
])) {
result.push(param);
}
}
}
else if (value) {
for (const [key, innerValue] of Object.entries(value)) {
for (const param of buildNormalizedParams(innerValue, [...path, key])) {
result.push(param);
}
}
}
}
return result;
}
exports.buildNormalizedParams = buildNormalizedParams;
//# sourceMappingURL=buildNormalizedParams.js.map