"use strict"; 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