54 lines
1.7 KiB
JavaScript
54 lines
1.7 KiB
JavaScript
|
"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
|