@dpkit/core
Version:
Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames
40 lines • 5.63 kB
JavaScript
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==