"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const equal = require("fast-deep-equal"); const SCALAR_TYPES = ["number", "integer", "string", "boolean", "null"]; function getDef() { return { keyword: "uniqueItemProperties", type: "array", schemaType: "array", compile(keys, parentSchema) { const scalar = getScalarKeys(keys, parentSchema); return (data) => { if (data.length <= 1) return true; for (let k = 0; k < keys.length; k++) { const key = keys[k]; if (scalar[k]) { const hash = {}; for (const x of data) { if (!x || typeof x != "object") continue; let p = x[key]; if (p && typeof p == "object") continue; if (typeof p == "string") p = '"' + p; if (hash[p]) return false; hash[p] = true; } } else { for (let i = data.length; i--;) { const x = data[i]; if (!x || typeof x != "object") continue; for (let j = i; j--;) { const y = data[j]; if (y && typeof y == "object" && equal(x[key], y[key])) return false; } } } } return true; }; }, metaSchema: { type: "array", items: { type: "string" }, }, }; } exports.default = getDef; function getScalarKeys(keys, schema) { return keys.map((key) => { var _a, _b, _c; const t = (_c = (_b = (_a = schema.items) === null || _a === void 0 ? void 0 : _a.properties) === null || _b === void 0 ? void 0 : _b[key]) === null || _c === void 0 ? void 0 : _c.type; return Array.isArray(t) ? !t.includes("object") && !t.includes("array") : SCALAR_TYPES.includes(t); }); } module.exports = getDef; //# sourceMappingURL=uniqueItemProperties.js.map