Spaces:
Running
Running
; | |
Object.defineProperty(exports, "__esModule", { value: true }); | |
const _util_1 = require("./_util"); | |
function getDef(opts) { | |
return { | |
keyword: "deepProperties", | |
type: "object", | |
schemaType: "object", | |
macro: function (schema) { | |
const allOf = []; | |
for (const pointer in schema) | |
allOf.push(getSchema(pointer, schema[pointer])); | |
return { allOf }; | |
}, | |
metaSchema: { | |
type: "object", | |
propertyNames: { type: "string", format: "json-pointer" }, | |
additionalProperties: (0, _util_1.metaSchemaRef)(opts), | |
}, | |
}; | |
} | |
exports.default = getDef; | |
function getSchema(jsonPointer, schema) { | |
const segments = jsonPointer.split("/"); | |
const rootSchema = {}; | |
let pointerSchema = rootSchema; | |
for (let i = 1; i < segments.length; i++) { | |
let segment = segments[i]; | |
const isLast = i === segments.length - 1; | |
segment = unescapeJsonPointer(segment); | |
const properties = (pointerSchema.properties = {}); | |
let items; | |
if (/[0-9]+/.test(segment)) { | |
let count = +segment; | |
items = pointerSchema.items = []; | |
pointerSchema.type = ["object", "array"]; | |
while (count--) | |
items.push({}); | |
} | |
else { | |
pointerSchema.type = "object"; | |
} | |
pointerSchema = isLast ? schema : {}; | |
properties[segment] = pointerSchema; | |
if (items) | |
items.push(pointerSchema); | |
} | |
return rootSchema; | |
} | |
function unescapeJsonPointer(str) { | |
return str.replace(/~1/g, "/").replace(/~0/g, "~"); | |
} | |
module.exports = getDef; | |
//# sourceMappingURL=deepProperties.js.map |