UNPKG

@dpkit/core

Version:

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

65 lines 7.93 kB
import { loadDialect } from "../dialect/index.js"; import { validateDescriptor } from "../general/index.js"; import { AssertionError } 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(descriptorOrResource, options) { const descriptor = descriptorOrResource; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9yZXNvdXJjZS92YWxpZGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDakQsT0FBTyxFQUFtQixrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBRS9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBRTFELE1BQU0sZUFBZSxHQUFHLHdEQUF3RCxDQUFBO0FBRWhGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSwwQkFBMEIsQ0FDOUMsb0JBQTJDLEVBQzNDLE9BRUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxvQkFBa0MsQ0FBQTtJQUVyRCxNQUFNLE9BQU8sR0FDWCxPQUFPLFVBQVUsQ0FBQyxPQUFPLEtBQUssUUFBUTtRQUNwQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU87UUFDcEIsQ0FBQyxDQUFDLGVBQWUsQ0FBQTtJQUVyQixNQUFNLE9BQU8sR0FBRyxNQUFNLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUMxQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUV6RSxJQUFJLFFBQVEsR0FBeUIsU0FBUyxDQUFBO0lBQzlDLElBQUksS0FBSyxFQUFFLENBQUM7UUFDViw4Q0FBOEM7UUFDOUMsUUFBUSxHQUFHLGlCQUFpQixDQUFDLFVBQVUsRUFBRTtZQUN2QyxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVE7U0FDNUIsQ0FBd0IsQ0FBQTtJQUMzQixDQUFDO0lBRUQsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNiLE1BQU0sYUFBYSxHQUFHLE1BQU0seUJBQXlCLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDL0QsSUFBSSxhQUFhO1lBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFBO1FBRWhELE1BQU0sWUFBWSxHQUFHLE1BQU0sd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDN0QsSUFBSSxZQUFZO1lBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFBO1FBRTlDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLFFBQVEsR0FBRyxTQUFTLENBQUE7WUFDcEIsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUE7QUFDcEMsQ0FBQztBQUVELEtBQUssVUFBVSx5QkFBeUIsQ0FBQyxRQUFrQjtJQUN6RCxJQUFJLE9BQU8sUUFBUSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUM7WUFDSCxNQUFNLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDckMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLEtBQUssWUFBWSxjQUFjLEVBQUUsQ0FBQztnQkFDcEMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFBO1lBQ3JCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFBO0FBQ2xCLENBQUM7QUFFRCxLQUFLLFVBQVUsd0JBQXdCLENBQUMsUUFBa0I7SUFDeEQsSUFBSSxPQUFPLFFBQVEsQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ25DLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxLQUFLLFlBQVksY0FBYyxFQUFFLENBQUM7Z0JBQ3BDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQTtZQUNyQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9hZERpYWxlY3QgfSBmcm9tIFwiLi4vZGlhbGVjdC9pbmRleC5qc1wiXG5pbXBvcnQgeyB0eXBlIERlc2NyaXB0b3IsIHZhbGlkYXRlRGVzY3JpcHRvciB9IGZyb20gXCIuLi9nZW5lcmFsL2luZGV4LmpzXCJcbmltcG9ydCB7IEFzc2VydGlvbkVycm9yIH0gZnJvbSBcIi4uL2dlbmVyYWwvaW5kZXguanNcIlxuaW1wb3J0IHsgbG9hZFByb2ZpbGUgfSBmcm9tIFwiLi4vZ2VuZXJhbC9pbmRleC5qc1wiXG5pbXBvcnQgeyBsb2FkU2NoZW1hIH0gZnJvbSBcIi4uL3NjaGVtYS9pbmRleC5qc1wiXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSBcIi4vUmVzb3VyY2UuanNcIlxuaW1wb3J0IHsgbm9ybWFsaXplUmVzb3VyY2UgfSBmcm9tIFwiLi9wcm9jZXNzL25vcm1hbGl6ZS5qc1wiXG5cbmNvbnN0IERFRkFVTFRfUFJPRklMRSA9IFwiaHR0cHM6Ly9kYXRhcGFja2FnZS5vcmcvcHJvZmlsZXMvMS4wL2RhdGFyZXNvdXJjZS5qc29uXCJcblxuLyoqXG4gKiBWYWxpZGF0ZSBhIFJlc291cmNlIGRlc2NyaXB0b3IgKEpTT04gT2JqZWN0KSBhZ2FpbnN0IGl0cyBwcm9maWxlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2YWxpZGF0ZVJlc291cmNlRGVzY3JpcHRvcihcbiAgZGVzY3JpcHRvck9yUmVzb3VyY2U6IERlc2NyaXB0b3IgfCBSZXNvdXJjZSxcbiAgb3B0aW9ucz86IHtcbiAgICBiYXNlcGF0aD86IHN0cmluZ1xuICB9LFxuKSB7XG4gIGNvbnN0IGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yT3JSZXNvdXJjZSBhcyBEZXNjcmlwdG9yXG5cbiAgY29uc3QgJHNjaGVtYSA9XG4gICAgdHlwZW9mIGRlc2NyaXB0b3IuJHNjaGVtYSA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBkZXNjcmlwdG9yLiRzY2hlbWFcbiAgICAgIDogREVGQVVMVF9QUk9GSUxFXG5cbiAgY29uc3QgcHJvZmlsZSA9IGF3YWl0IGxvYWRQcm9maWxlKCRzY2hlbWEpXG4gIGxldCB7IHZhbGlkLCBlcnJvcnMgfSA9IGF3YWl0IHZhbGlkYXRlRGVzY3JpcHRvcihkZXNjcmlwdG9yLCB7IHByb2ZpbGUgfSlcblxuICBsZXQgcmVzb3VyY2U6IFJlc291cmNlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gIGlmICh2YWxpZCkge1xuICAgIC8vIFZhbGlkYXRpb24gKyBub3JtYWxpemF0aW9uID0gd2UgY2FuIGNhc3QgaXRcbiAgICByZXNvdXJjZSA9IG5vcm1hbGl6ZVJlc291cmNlKGRlc2NyaXB0b3IsIHtcbiAgICAgIGJhc2VwYXRoOiBvcHRpb25zPy5iYXNlcGF0aCxcbiAgICB9KSBhcyB1bmtub3duIGFzIFJlc291cmNlXG4gIH1cblxuICBpZiAocmVzb3VyY2UpIHtcbiAgICBjb25zdCBkaWFsZWN0RXJvcnJzID0gYXdhaXQgdmFsaWRhdGVEaWFsZWN0SWZFeHRlcm5hbChyZXNvdXJjZSlcbiAgICBpZiAoZGlhbGVjdEVyb3JycykgZXJyb3JzLnB1c2goLi4uZGlhbGVjdEVyb3JycylcblxuICAgIGNvbnN0IHNjaGVtYUVyb3JycyA9IGF3YWl0IHZhbGlkYXRlU2NoZW1hSWZFeHRlcm5hbChyZXNvdXJjZSlcbiAgICBpZiAoc2NoZW1hRXJvcnJzKSBlcnJvcnMucHVzaCguLi5zY2hlbWFFcm9ycnMpXG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgICAgcmVzb3VyY2UgPSB1bmRlZmluZWRcbiAgICAgIHZhbGlkID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyB2YWxpZCwgZXJyb3JzLCByZXNvdXJjZSB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlRGlhbGVjdElmRXh0ZXJuYWwocmVzb3VyY2U6IFJlc291cmNlKSB7XG4gIGlmICh0eXBlb2YgcmVzb3VyY2UuZGlhbGVjdCA9PT0gXCJzdHJpbmdcIikge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBsb2FkRGlhbGVjdChyZXNvdXJjZS5kaWFsZWN0KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBc3NlcnRpb25FcnJvcikge1xuICAgICAgICByZXR1cm4gZXJyb3IuZXJyb3JzXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG5hc3luYyBmdW5jdGlvbiB2YWxpZGF0ZVNjaGVtYUlmRXh0ZXJuYWwocmVzb3VyY2U6IFJlc291cmNlKSB7XG4gIGlmICh0eXBlb2YgcmVzb3VyY2Uuc2NoZW1hID09PSBcInN0cmluZ1wiKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGxvYWRTY2hlbWEocmVzb3VyY2Uuc2NoZW1hKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBc3NlcnRpb25FcnJvcikge1xuICAgICAgICByZXR1cm4gZXJyb3IuZXJyb3JzXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuIl19