UNPKG

@dpkit/core

Version:

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

65 lines 7.86 kB
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==