UNPKG

jsonbinpack

Version:

A space-efficient schema-driven binary JSON serialization format based on JSON Schema

36 lines (35 loc) 1.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getOneOfEncoding = exports.getOneOfStates = void 0; var lodash_1 = require("lodash"); var encoder_1 = require("../encoder"); var index_1 = require("./index"); var getOneOfStates = function (schema) { return schema.oneOf.reduce(function (accumulator, choice) { var states = index_1.getStates(choice); if (Array.isArray(states)) { if (Array.isArray(accumulator)) { return lodash_1.uniqWith(accumulator.concat(states), lodash_1.isEqual); } return accumulator + states.length; } var accumulatorLength = Array.isArray(accumulator) ? accumulator.length : accumulator; return accumulatorLength + states; }, []); }; exports.getOneOfStates = getOneOfStates; var getOneOfEncoding = function (schema, level) { return { type: encoder_1.EncodingType.OneOf, encoding: 'ONEOF_CHOICE_INDEX_PREFIX', options: { choices: schema.oneOf.map(function (item) { return { schema: item, encoding: index_1.getEncoding(item, level + 1) }; }) } }; }; exports.getOneOfEncoding = getOneOfEncoding;