123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- "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
|