UNPKG

@dpkit/core

Version:

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

70 lines 8.16 kB
import invariant from "tiny-invariant"; import { normalizeField } from "../../field/index.js"; export function normalizeSchema(descriptor) { descriptor = globalThis.structuredClone(descriptor); normalizeProfile(descriptor); normalizeFields(descriptor); normalizePrimaryKey(descriptor); normalizeForeignKeys(descriptor); normalizeUniqueKeys(descriptor); return descriptor; } function normalizeProfile(descriptor) { descriptor.$schema = descriptor.$schema ?? descriptor.profile; } function normalizeFields(descriptor) { const fields = descriptor.fields; if (!fields) { return; } invariant(Array.isArray(fields), "Fields being an array is guaranteed by the validation"); for (const field of fields) { normalizeField({ descriptor: field }); } } function normalizePrimaryKey(descriptor) { const primaryKey = descriptor.primaryKey; if (!primaryKey) { return; } if (typeof primaryKey === "string") { descriptor.primaryKey = [primaryKey]; } } function normalizeForeignKeys(descriptor) { const foreignKeys = descriptor.foreignKeys; if (!foreignKeys) { return; } if (Array.isArray(foreignKeys)) { for (const foreignKey of foreignKeys) { const fields = foreignKey.fields; if (typeof fields === "string") { foreignKey.fields = [fields]; } const referenceFields = foreignKey.reference?.fields; if (typeof referenceFields === "string") { foreignKey.reference.fields = [referenceFields]; } } } } function normalizeUniqueKeys(descriptor) { const uniqueKeys = descriptor.uniqueKeys; if (!uniqueKeys) { return; } if (!Array.isArray(uniqueKeys)) { descriptor.uniqueKeys = undefined; console.warn(`Ignoring v2.0 incompatible uniqueKeys: ${uniqueKeys}`); return; } for (const uniqueKey of uniqueKeys) { if (!Array.isArray(uniqueKey)) { descriptor.uniqueKeys = undefined; console.warn(`Ignoring v2.0 incompatible uniqueKey: ${uniqueKey}`); break; } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc2NoZW1hL3Byb2Nlc3Mvbm9ybWFsaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sU0FBUyxNQUFNLGdCQUFnQixDQUFBO0FBQ3RDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUdyRCxNQUFNLFVBQVUsZUFBZSxDQUFDLFVBQXNCO0lBQ3BELFVBQVUsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBRW5ELGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzVCLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUMzQixtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUMvQixvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNoQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUUvQixPQUFPLFVBQVUsQ0FBQTtBQUNuQixDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxVQUFzQjtJQUM5QyxVQUFVLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQTtBQUMvRCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsVUFBc0I7SUFDN0MsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQTtJQUNoQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixPQUFNO0lBQ1IsQ0FBQztJQUVELFNBQVMsQ0FDUCxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUNyQix1REFBdUQsQ0FDeEQsQ0FBQTtJQUVELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7UUFDM0IsY0FBYyxDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDdkMsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLFVBQXNCO0lBQ2pELE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUE7SUFDeEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNuQyxVQUFVLENBQUMsVUFBVSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDdEMsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLFVBQXNCO0lBQ2xELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUE7SUFDMUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDL0IsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNyQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFBO1lBQ2hDLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQy9CLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUM5QixDQUFDO1lBRUQsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUE7WUFDcEQsSUFBSSxPQUFPLGVBQWUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDeEMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQTtZQUNqRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxVQUFzQjtJQUNqRCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFBO0lBQ3hDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDL0IsVUFBVSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUE7UUFDakMsT0FBTyxDQUFDLElBQUksQ0FBQywwQ0FBMEMsVUFBVSxFQUFFLENBQUMsQ0FBQTtRQUNwRSxPQUFNO0lBQ1IsQ0FBQztJQUVELEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM5QixVQUFVLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQTtZQUNqQyxPQUFPLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxTQUFTLEVBQUUsQ0FBQyxDQUFBO1lBQ2xFLE1BQUs7UUFDUCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW52YXJpYW50IGZyb20gXCJ0aW55LWludmFyaWFudFwiXG5pbXBvcnQgeyBub3JtYWxpemVGaWVsZCB9IGZyb20gXCIuLi8uLi9maWVsZC9pbmRleC5qc1wiXG5pbXBvcnQgdHlwZSB7IERlc2NyaXB0b3IgfSBmcm9tIFwiLi4vLi4vZ2VuZXJhbC9pbmRleC5qc1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTY2hlbWEoZGVzY3JpcHRvcjogRGVzY3JpcHRvcikge1xuICBkZXNjcmlwdG9yID0gZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmUoZGVzY3JpcHRvcilcblxuICBub3JtYWxpemVQcm9maWxlKGRlc2NyaXB0b3IpXG4gIG5vcm1hbGl6ZUZpZWxkcyhkZXNjcmlwdG9yKVxuICBub3JtYWxpemVQcmltYXJ5S2V5KGRlc2NyaXB0b3IpXG4gIG5vcm1hbGl6ZUZvcmVpZ25LZXlzKGRlc2NyaXB0b3IpXG4gIG5vcm1hbGl6ZVVuaXF1ZUtleXMoZGVzY3JpcHRvcilcblxuICByZXR1cm4gZGVzY3JpcHRvclxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQcm9maWxlKGRlc2NyaXB0b3I6IERlc2NyaXB0b3IpIHtcbiAgZGVzY3JpcHRvci4kc2NoZW1hID0gZGVzY3JpcHRvci4kc2NoZW1hID8/IGRlc2NyaXB0b3IucHJvZmlsZVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVGaWVsZHMoZGVzY3JpcHRvcjogRGVzY3JpcHRvcikge1xuICBjb25zdCBmaWVsZHMgPSBkZXNjcmlwdG9yLmZpZWxkc1xuICBpZiAoIWZpZWxkcykge1xuICAgIHJldHVyblxuICB9XG5cbiAgaW52YXJpYW50KFxuICAgIEFycmF5LmlzQXJyYXkoZmllbGRzKSxcbiAgICBcIkZpZWxkcyBiZWluZyBhbiBhcnJheSBpcyBndWFyYW50ZWVkIGJ5IHRoZSB2YWxpZGF0aW9uXCIsXG4gIClcblxuICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgIG5vcm1hbGl6ZUZpZWxkKHsgZGVzY3JpcHRvcjogZmllbGQgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQcmltYXJ5S2V5KGRlc2NyaXB0b3I6IERlc2NyaXB0b3IpIHtcbiAgY29uc3QgcHJpbWFyeUtleSA9IGRlc2NyaXB0b3IucHJpbWFyeUtleVxuICBpZiAoIXByaW1hcnlLZXkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJpbWFyeUtleSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGRlc2NyaXB0b3IucHJpbWFyeUtleSA9IFtwcmltYXJ5S2V5XVxuICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZvcmVpZ25LZXlzKGRlc2NyaXB0b3I6IERlc2NyaXB0b3IpIHtcbiAgY29uc3QgZm9yZWlnbktleXMgPSBkZXNjcmlwdG9yLmZvcmVpZ25LZXlzXG4gIGlmICghZm9yZWlnbktleXMpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGZvcmVpZ25LZXlzKSkge1xuICAgIGZvciAoY29uc3QgZm9yZWlnbktleSBvZiBmb3JlaWduS2V5cykge1xuICAgICAgY29uc3QgZmllbGRzID0gZm9yZWlnbktleS5maWVsZHNcbiAgICAgIGlmICh0eXBlb2YgZmllbGRzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGZvcmVpZ25LZXkuZmllbGRzID0gW2ZpZWxkc11cbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVmZXJlbmNlRmllbGRzID0gZm9yZWlnbktleS5yZWZlcmVuY2U/LmZpZWxkc1xuICAgICAgaWYgKHR5cGVvZiByZWZlcmVuY2VGaWVsZHMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZm9yZWlnbktleS5yZWZlcmVuY2UuZmllbGRzID0gW3JlZmVyZW5jZUZpZWxkc11cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVW5pcXVlS2V5cyhkZXNjcmlwdG9yOiBEZXNjcmlwdG9yKSB7XG4gIGNvbnN0IHVuaXF1ZUtleXMgPSBkZXNjcmlwdG9yLnVuaXF1ZUtleXNcbiAgaWYgKCF1bmlxdWVLZXlzKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkodW5pcXVlS2V5cykpIHtcbiAgICBkZXNjcmlwdG9yLnVuaXF1ZUtleXMgPSB1bmRlZmluZWRcbiAgICBjb25zb2xlLndhcm4oYElnbm9yaW5nIHYyLjAgaW5jb21wYXRpYmxlIHVuaXF1ZUtleXM6ICR7dW5pcXVlS2V5c31gKVxuICAgIHJldHVyblxuICB9XG5cbiAgZm9yIChjb25zdCB1bmlxdWVLZXkgb2YgdW5pcXVlS2V5cykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh1bmlxdWVLZXkpKSB7XG4gICAgICBkZXNjcmlwdG9yLnVuaXF1ZUtleXMgPSB1bmRlZmluZWRcbiAgICAgIGNvbnNvbGUud2FybihgSWdub3JpbmcgdjIuMCBpbmNvbXBhdGlibGUgdW5pcXVlS2V5OiAke3VuaXF1ZUtleX1gKVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbn1cbiJdfQ==