UNPKG

@dpkit/core

Version:

Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames

40 lines 5.63 kB
import { ajv } from "./ajv.js"; import { profileRegistry } from "./registry.js"; export async function validateProfile(descriptor, options) { const errors = []; await ajv.validateSchema(descriptor); for (const error of ajv.errors ?? []) { errors.push({ message: error.message ?? error.keyword }); } if (!checkProfileType(descriptor, options)) { errors.push({ message: `Profile at ${options?.path} is not a valid ${options?.type} profile`, }); } return { errors, valid: !errors.length, profile: !errors.length ? descriptor : undefined, }; } function checkProfileType(descriptor, options) { if (!options?.path || !options?.type) { return true; } // This type official profiles const typeProfiles = Object.values(profileRegistry).filter(profile => profile.type === options.type); for (const typeProfile of typeProfiles) { // The profile itself is from the official registry if (options.path === typeProfile.path) return true; // The profile extends one of the official profiles if (Array.isArray(descriptor.allOf)) { for (const ref of Object.values(descriptor.allOf)) { if (ref === typeProfile.path) return true; } } } return false; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9nZW5lcmFsL3Byb2ZpbGUvdmFsaWRhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUU5QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRS9DLE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUNuQyxVQUFzQixFQUN0QixPQUdDO0lBRUQsTUFBTSxNQUFNLEdBQTBCLEVBQUUsQ0FBQTtJQUV4QyxNQUFNLEdBQUcsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDcEMsS0FBSyxNQUFNLEtBQUssSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUMxRCxDQUFDO0lBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDVixPQUFPLEVBQUUsY0FBYyxPQUFPLEVBQUUsSUFBSSxtQkFBbUIsT0FBTyxFQUFFLElBQUksVUFBVTtTQUMvRSxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLE1BQU07UUFDTixLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTTtRQUNyQixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBRSxVQUFzQixDQUFDLENBQUMsQ0FBQyxTQUFTO0tBQzlELENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FDdkIsVUFBc0IsRUFDdEIsT0FHQztJQUVELElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3JDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELDhCQUE4QjtJQUM5QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sQ0FDeEQsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQ3pDLENBQUE7SUFFRCxLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLG1EQUFtRDtRQUNuRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQTtRQUVsRCxtREFBbUQ7UUFDbkQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BDLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxHQUFHLEtBQUssV0FBVyxDQUFDLElBQUk7b0JBQUUsT0FBTyxJQUFJLENBQUE7WUFDM0MsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEZXNjcmlwdG9yIH0gZnJvbSBcIi4uL2Rlc2NyaXB0b3IvRGVzY3JpcHRvci50c1wiXG5pbXBvcnQgdHlwZSB7IFByb2ZpbGUgfSBmcm9tIFwiLi9Qcm9maWxlLnRzXCJcbmltcG9ydCB7IGFqdiB9IGZyb20gXCIuL2Fqdi50c1wiXG5pbXBvcnQgdHlwZSB7IFByb2ZpbGVUeXBlIH0gZnJvbSBcIi4vcmVnaXN0cnkudHNcIlxuaW1wb3J0IHsgcHJvZmlsZVJlZ2lzdHJ5IH0gZnJvbSBcIi4vcmVnaXN0cnkudHNcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVQcm9maWxlKFxuICBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yLFxuICBvcHRpb25zPzoge1xuICAgIHBhdGg/OiBzdHJpbmdcbiAgICB0eXBlPzogUHJvZmlsZVR5cGVcbiAgfSxcbikge1xuICBjb25zdCBlcnJvcnM6IHsgbWVzc2FnZTogc3RyaW5nIH1bXSA9IFtdXG5cbiAgYXdhaXQgYWp2LnZhbGlkYXRlU2NoZW1hKGRlc2NyaXB0b3IpXG4gIGZvciAoY29uc3QgZXJyb3Igb2YgYWp2LmVycm9ycyA/PyBbXSkge1xuICAgIGVycm9ycy5wdXNoKHsgbWVzc2FnZTogZXJyb3IubWVzc2FnZSA/PyBlcnJvci5rZXl3b3JkIH0pXG4gIH1cblxuICBpZiAoIWNoZWNrUHJvZmlsZVR5cGUoZGVzY3JpcHRvciwgb3B0aW9ucykpIHtcbiAgICBlcnJvcnMucHVzaCh7XG4gICAgICBtZXNzYWdlOiBgUHJvZmlsZSBhdCAke29wdGlvbnM/LnBhdGh9IGlzIG5vdCBhIHZhbGlkICR7b3B0aW9ucz8udHlwZX0gcHJvZmlsZWAsXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXJyb3JzLFxuICAgIHZhbGlkOiAhZXJyb3JzLmxlbmd0aCxcbiAgICBwcm9maWxlOiAhZXJyb3JzLmxlbmd0aCA/IChkZXNjcmlwdG9yIGFzIFByb2ZpbGUpIDogdW5kZWZpbmVkLFxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvZmlsZVR5cGUoXG4gIGRlc2NyaXB0b3I6IERlc2NyaXB0b3IsXG4gIG9wdGlvbnM/OiB7XG4gICAgcGF0aD86IHN0cmluZ1xuICAgIHR5cGU/OiBQcm9maWxlVHlwZVxuICB9LFxuKSB7XG4gIGlmICghb3B0aW9ucz8ucGF0aCB8fCAhb3B0aW9ucz8udHlwZSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBUaGlzIHR5cGUgb2ZmaWNpYWwgcHJvZmlsZXNcbiAgY29uc3QgdHlwZVByb2ZpbGVzID0gT2JqZWN0LnZhbHVlcyhwcm9maWxlUmVnaXN0cnkpLmZpbHRlcihcbiAgICBwcm9maWxlID0+IHByb2ZpbGUudHlwZSA9PT0gb3B0aW9ucy50eXBlLFxuICApXG5cbiAgZm9yIChjb25zdCB0eXBlUHJvZmlsZSBvZiB0eXBlUHJvZmlsZXMpIHtcbiAgICAvLyBUaGUgcHJvZmlsZSBpdHNlbGYgaXMgZnJvbSB0aGUgb2ZmaWNpYWwgcmVnaXN0cnlcbiAgICBpZiAob3B0aW9ucy5wYXRoID09PSB0eXBlUHJvZmlsZS5wYXRoKSByZXR1cm4gdHJ1ZVxuXG4gICAgLy8gVGhlIHByb2ZpbGUgZXh0ZW5kcyBvbmUgb2YgdGhlIG9mZmljaWFsIHByb2ZpbGVzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVzY3JpcHRvci5hbGxPZikpIHtcbiAgICAgIGZvciAoY29uc3QgcmVmIG9mIE9iamVjdC52YWx1ZXMoZGVzY3JpcHRvci5hbGxPZikpIHtcbiAgICAgICAgaWYgKHJlZiA9PT0gdHlwZVByb2ZpbGUucGF0aCkgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cbiJdfQ==