@dpkit/core
Version:
Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames
65 lines • 7.86 kB
JavaScript
import { loadDialect } from "../dialect/index.js";
import { AssertionError } from "../error/index.js";
import { validateDescriptor } from "../general/index.js";
import { loadProfile } from "../general/index.js";
import { loadSchema } from "../schema/index.js";
import { normalizeResource } from "./process/normalize.js";
const DEFAULT_PROFILE = "https://datapackage.org/profiles/1.0/dataresource.json";
/**
* Validate a Resource descriptor (JSON Object) against its profile
*/
export async function validateResourceDescriptor(source, options) {
const descriptor = source;
const $schema = typeof descriptor.$schema === "string"
? descriptor.$schema
: DEFAULT_PROFILE;
const profile = await loadProfile($schema);
let { valid, errors } = await validateDescriptor(descriptor, { profile });
let resource = undefined;
if (valid) {
// Validation + normalization = we can cast it
resource = normalizeResource(descriptor, {
basepath: options?.basepath,
});
}
if (resource) {
const dialectErorrs = await validateDialectIfExternal(resource);
if (dialectErorrs)
errors.push(...dialectErorrs);
const schemaErorrs = await validateSchemaIfExternal(resource);
if (schemaErorrs)
errors.push(...schemaErorrs);
if (errors.length) {
resource = undefined;
valid = false;
}
}
return { valid, errors, resource };
}
async function validateDialectIfExternal(resource) {
if (typeof resource.dialect === "string") {
try {
await loadDialect(resource.dialect);
}
catch (error) {
if (error instanceof AssertionError) {
return error.errors;
}
}
}
return undefined;
}
async function validateSchemaIfExternal(resource) {
if (typeof resource.schema === "string") {
try {
await loadSchema(resource.schema);
}
catch (error) {
if (error instanceof AssertionError) {
return error.errors;
}
}
}
return undefined;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9yZXNvdXJjZS92YWxpZGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ2xELE9BQU8sRUFBbUIsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBRS9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBRTFELE1BQU0sZUFBZSxHQUFHLHdEQUF3RCxDQUFBO0FBRWhGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSwwQkFBMEIsQ0FDOUMsTUFBNkIsRUFDN0IsT0FFQztJQUVELE1BQU0sVUFBVSxHQUFHLE1BQW9CLENBQUE7SUFFdkMsTUFBTSxPQUFPLEdBQ1gsT0FBTyxVQUFVLENBQUMsT0FBTyxLQUFLLFFBQVE7UUFDcEMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPO1FBQ3BCLENBQUMsQ0FBQyxlQUFlLENBQUE7SUFFckIsTUFBTSxPQUFPLEdBQUcsTUFBTSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDMUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFFekUsSUFBSSxRQUFRLEdBQXlCLFNBQVMsQ0FBQTtJQUM5QyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1YsOENBQThDO1FBQzlDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUU7WUFDdkMsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRO1NBQzVCLENBQXdCLENBQUE7SUFDM0IsQ0FBQztJQUVELElBQUksUUFBUSxFQUFFLENBQUM7UUFDYixNQUFNLGFBQWEsR0FBRyxNQUFNLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQy9ELElBQUksYUFBYTtZQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQTtRQUVoRCxNQUFNLFlBQVksR0FBRyxNQUFNLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzdELElBQUksWUFBWTtZQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQTtRQUU5QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixRQUFRLEdBQUcsU0FBUyxDQUFBO1lBQ3BCLEtBQUssR0FBRyxLQUFLLENBQUE7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFBO0FBQ3BDLENBQUM7QUFFRCxLQUFLLFVBQVUseUJBQXlCLENBQUMsUUFBa0I7SUFDekQsSUFBSSxPQUFPLFFBQVEsQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3JDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxLQUFLLFlBQVksY0FBYyxFQUFFLENBQUM7Z0JBQ3BDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQTtZQUNyQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDO0FBRUQsS0FBSyxVQUFVLHdCQUF3QixDQUFDLFFBQWtCO0lBQ3hELElBQUksT0FBTyxRQUFRLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQztZQUNILE1BQU0sVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNuQyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksS0FBSyxZQUFZLGNBQWMsRUFBRSxDQUFDO2dCQUNwQyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUE7WUFDckIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvYWREaWFsZWN0IH0gZnJvbSBcIi4uL2RpYWxlY3QvaW5kZXgudHNcIlxuaW1wb3J0IHsgQXNzZXJ0aW9uRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3IvaW5kZXgudHNcIlxuaW1wb3J0IHsgdHlwZSBEZXNjcmlwdG9yLCB2YWxpZGF0ZURlc2NyaXB0b3IgfSBmcm9tIFwiLi4vZ2VuZXJhbC9pbmRleC50c1wiXG5pbXBvcnQgeyBsb2FkUHJvZmlsZSB9IGZyb20gXCIuLi9nZW5lcmFsL2luZGV4LnRzXCJcbmltcG9ydCB7IGxvYWRTY2hlbWEgfSBmcm9tIFwiLi4vc2NoZW1hL2luZGV4LnRzXCJcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tIFwiLi9SZXNvdXJjZS50c1wiXG5pbXBvcnQgeyBub3JtYWxpemVSZXNvdXJjZSB9IGZyb20gXCIuL3Byb2Nlc3Mvbm9ybWFsaXplLnRzXCJcblxuY29uc3QgREVGQVVMVF9QUk9GSUxFID0gXCJodHRwczovL2RhdGFwYWNrYWdlLm9yZy9wcm9maWxlcy8xLjAvZGF0YXJlc291cmNlLmpzb25cIlxuXG4vKipcbiAqIFZhbGlkYXRlIGEgUmVzb3VyY2UgZGVzY3JpcHRvciAoSlNPTiBPYmplY3QpIGFnYWluc3QgaXRzIHByb2ZpbGVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlUmVzb3VyY2VEZXNjcmlwdG9yKFxuICBzb3VyY2U6IERlc2NyaXB0b3IgfCBSZXNvdXJjZSxcbiAgb3B0aW9ucz86IHtcbiAgICBiYXNlcGF0aD86IHN0cmluZ1xuICB9LFxuKSB7XG4gIGNvbnN0IGRlc2NyaXB0b3IgPSBzb3VyY2UgYXMgRGVzY3JpcHRvclxuXG4gIGNvbnN0ICRzY2hlbWEgPVxuICAgIHR5cGVvZiBkZXNjcmlwdG9yLiRzY2hlbWEgPT09IFwic3RyaW5nXCJcbiAgICAgID8gZGVzY3JpcHRvci4kc2NoZW1hXG4gICAgICA6IERFRkFVTFRfUFJPRklMRVxuXG4gIGNvbnN0IHByb2ZpbGUgPSBhd2FpdCBsb2FkUHJvZmlsZSgkc2NoZW1hKVxuICBsZXQgeyB2YWxpZCwgZXJyb3JzIH0gPSBhd2FpdCB2YWxpZGF0ZURlc2NyaXB0b3IoZGVzY3JpcHRvciwgeyBwcm9maWxlIH0pXG5cbiAgbGV0IHJlc291cmNlOiBSZXNvdXJjZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICBpZiAodmFsaWQpIHtcbiAgICAvLyBWYWxpZGF0aW9uICsgbm9ybWFsaXphdGlvbiA9IHdlIGNhbiBjYXN0IGl0XG4gICAgcmVzb3VyY2UgPSBub3JtYWxpemVSZXNvdXJjZShkZXNjcmlwdG9yLCB7XG4gICAgICBiYXNlcGF0aDogb3B0aW9ucz8uYmFzZXBhdGgsXG4gICAgfSkgYXMgdW5rbm93biBhcyBSZXNvdXJjZVxuICB9XG5cbiAgaWYgKHJlc291cmNlKSB7XG4gICAgY29uc3QgZGlhbGVjdEVyb3JycyA9IGF3YWl0IHZhbGlkYXRlRGlhbGVjdElmRXh0ZXJuYWwocmVzb3VyY2UpXG4gICAgaWYgKGRpYWxlY3RFcm9ycnMpIGVycm9ycy5wdXNoKC4uLmRpYWxlY3RFcm9ycnMpXG5cbiAgICBjb25zdCBzY2hlbWFFcm9ycnMgPSBhd2FpdCB2YWxpZGF0ZVNjaGVtYUlmRXh0ZXJuYWwocmVzb3VyY2UpXG4gICAgaWYgKHNjaGVtYUVyb3JycykgZXJyb3JzLnB1c2goLi4uc2NoZW1hRXJvcnJzKVxuXG4gICAgaWYgKGVycm9ycy5sZW5ndGgpIHtcbiAgICAgIHJlc291cmNlID0gdW5kZWZpbmVkXG4gICAgICB2YWxpZCA9IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgdmFsaWQsIGVycm9ycywgcmVzb3VyY2UgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB2YWxpZGF0ZURpYWxlY3RJZkV4dGVybmFsKHJlc291cmNlOiBSZXNvdXJjZSkge1xuICBpZiAodHlwZW9mIHJlc291cmNlLmRpYWxlY3QgPT09IFwic3RyaW5nXCIpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbG9hZERpYWxlY3QocmVzb3VyY2UuZGlhbGVjdClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXNzZXJ0aW9uRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yLmVycm9yc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVTY2hlbWFJZkV4dGVybmFsKHJlc291cmNlOiBSZXNvdXJjZSkge1xuICBpZiAodHlwZW9mIHJlc291cmNlLnNjaGVtYSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBsb2FkU2NoZW1hKHJlc291cmNlLnNjaGVtYSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXNzZXJ0aW9uRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yLmVycm9yc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cbiJdfQ==