@dpkit/core
Version:
Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames
65 lines • 8.37 kB
JavaScript
import { normalizeDialect } from "../../dialect/index.js";
import { isDescriptor, normalizePath } from "../../general/index.js";
import { normalizeSchema } from "../../schema/index.js";
export function normalizeResource(descriptor, options) {
descriptor = globalThis.structuredClone(descriptor);
normalizeProfile(descriptor);
normalizeUrl(descriptor);
normalizeType(descriptor);
normalizePaths(descriptor, options);
normalizeResourceDialect(descriptor);
normalizeResourceSchema(descriptor);
return descriptor;
}
function normalizeProfile(descriptor) {
descriptor.$schema = descriptor.$schema ?? descriptor.profile;
}
function normalizeUrl(descriptor) {
const url = descriptor.url;
if (!url) {
return;
}
if (!descriptor.path) {
descriptor.path = descriptor.url;
descriptor.url = undefined;
}
}
function normalizeType(descriptor) {
const type = descriptor.type;
if (!type) {
return;
}
if (typeof type !== "string") {
descriptor.type = undefined;
console.warn(`Ignoring v2.0 incompatible resource type: ${type}`);
}
}
function normalizePaths(descriptor, options) {
const basepath = options?.basepath;
if (typeof descriptor.path === "string") {
descriptor.path = normalizePath(descriptor.path, { basepath });
}
if (Array.isArray(descriptor.path)) {
for (const [index, path] of descriptor.path.entries()) {
descriptor.path[index] = normalizePath(path, { basepath });
}
}
for (const name of ["dialect", "schema"]) {
if (typeof descriptor[name] === "string") {
descriptor[name] = normalizePath(descriptor[name], {
basepath,
});
}
}
}
function normalizeResourceDialect(descriptor) {
if (isDescriptor(descriptor.dialect)) {
descriptor.dialect = normalizeDialect({ descriptor: descriptor.dialect });
}
}
function normalizeResourceSchema(descriptor) {
if (isDescriptor(descriptor.schema)) {
descriptor.schema = normalizeSchema({ descriptor: descriptor.schema });
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcmVzb3VyY2UvcHJvY2Vzcy9ub3JtYWxpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUVwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFFdkQsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixVQUFzQixFQUN0QixPQUVDO0lBRUQsVUFBVSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUE7SUFFbkQsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDNUIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3hCLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUN6QixjQUFjLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBRW5DLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3BDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBRW5DLE9BQU8sVUFBVSxDQUFBO0FBQ25CLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLFVBQXNCO0lBQzlDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFBO0FBQy9ELENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxVQUFzQjtJQUMxQyxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFBO0lBQzFCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixVQUFVLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUE7UUFDaEMsVUFBVSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUE7SUFDNUIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxVQUFzQjtJQUMzQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFBO0lBQzVCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3QixVQUFVLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQTtRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ25FLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQ3JCLFVBQXNCLEVBQ3RCLE9BQStCO0lBRS9CLE1BQU0sUUFBUSxHQUFHLE9BQU8sRUFBRSxRQUFRLENBQUE7SUFFbEMsSUFBSSxPQUFPLFVBQVUsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDeEMsVUFBVSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDaEUsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3RELFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDNUQsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBVSxFQUFFLENBQUM7UUFDbEQsSUFBSSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDakQsUUFBUTthQUNULENBQUMsQ0FBQTtRQUNKLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQUMsVUFBc0I7SUFDdEQsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDckMsVUFBVSxDQUFDLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUMzRSxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQUMsVUFBc0I7SUFDckQsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDcEMsVUFBVSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFDeEUsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBub3JtYWxpemVEaWFsZWN0IH0gZnJvbSBcIi4uLy4uL2RpYWxlY3QvaW5kZXguanNcIlxuaW1wb3J0IHsgaXNEZXNjcmlwdG9yLCBub3JtYWxpemVQYXRoIH0gZnJvbSBcIi4uLy4uL2dlbmVyYWwvaW5kZXguanNcIlxuaW1wb3J0IHR5cGUgeyBEZXNjcmlwdG9yIH0gZnJvbSBcIi4uLy4uL2dlbmVyYWwvaW5kZXguanNcIlxuaW1wb3J0IHsgbm9ybWFsaXplU2NoZW1hIH0gZnJvbSBcIi4uLy4uL3NjaGVtYS9pbmRleC5qc1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVSZXNvdXJjZShcbiAgZGVzY3JpcHRvcjogRGVzY3JpcHRvcixcbiAgb3B0aW9ucz86IHtcbiAgICBiYXNlcGF0aD86IHN0cmluZ1xuICB9LFxuKSB7XG4gIGRlc2NyaXB0b3IgPSBnbG9iYWxUaGlzLnN0cnVjdHVyZWRDbG9uZShkZXNjcmlwdG9yKVxuXG4gIG5vcm1hbGl6ZVByb2ZpbGUoZGVzY3JpcHRvcilcbiAgbm9ybWFsaXplVXJsKGRlc2NyaXB0b3IpXG4gIG5vcm1hbGl6ZVR5cGUoZGVzY3JpcHRvcilcbiAgbm9ybWFsaXplUGF0aHMoZGVzY3JpcHRvciwgb3B0aW9ucylcblxuICBub3JtYWxpemVSZXNvdXJjZURpYWxlY3QoZGVzY3JpcHRvcilcbiAgbm9ybWFsaXplUmVzb3VyY2VTY2hlbWEoZGVzY3JpcHRvcilcblxuICByZXR1cm4gZGVzY3JpcHRvclxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQcm9maWxlKGRlc2NyaXB0b3I6IERlc2NyaXB0b3IpIHtcbiAgZGVzY3JpcHRvci4kc2NoZW1hID0gZGVzY3JpcHRvci4kc2NoZW1hID8/IGRlc2NyaXB0b3IucHJvZmlsZVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVVcmwoZGVzY3JpcHRvcjogRGVzY3JpcHRvcikge1xuICBjb25zdCB1cmwgPSBkZXNjcmlwdG9yLnVybFxuICBpZiAoIXVybCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCFkZXNjcmlwdG9yLnBhdGgpIHtcbiAgICBkZXNjcmlwdG9yLnBhdGggPSBkZXNjcmlwdG9yLnVybFxuICAgIGRlc2NyaXB0b3IudXJsID0gdW5kZWZpbmVkXG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVHlwZShkZXNjcmlwdG9yOiBEZXNjcmlwdG9yKSB7XG4gIGNvbnN0IHR5cGUgPSBkZXNjcmlwdG9yLnR5cGVcbiAgaWYgKCF0eXBlKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIpIHtcbiAgICBkZXNjcmlwdG9yLnR5cGUgPSB1bmRlZmluZWRcbiAgICBjb25zb2xlLndhcm4oYElnbm9yaW5nIHYyLjAgaW5jb21wYXRpYmxlIHJlc291cmNlIHR5cGU6ICR7dHlwZX1gKVxuICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGhzKFxuICBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yLFxuICBvcHRpb25zPzogeyBiYXNlcGF0aD86IHN0cmluZyB9LFxuKSB7XG4gIGNvbnN0IGJhc2VwYXRoID0gb3B0aW9ucz8uYmFzZXBhdGhcblxuICBpZiAodHlwZW9mIGRlc2NyaXB0b3IucGF0aCA9PT0gXCJzdHJpbmdcIikge1xuICAgIGRlc2NyaXB0b3IucGF0aCA9IG5vcm1hbGl6ZVBhdGgoZGVzY3JpcHRvci5wYXRoLCB7IGJhc2VwYXRoIH0pXG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShkZXNjcmlwdG9yLnBhdGgpKSB7XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIHBhdGhdIG9mIGRlc2NyaXB0b3IucGF0aC5lbnRyaWVzKCkpIHtcbiAgICAgIGRlc2NyaXB0b3IucGF0aFtpbmRleF0gPSBub3JtYWxpemVQYXRoKHBhdGgsIHsgYmFzZXBhdGggfSlcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IG5hbWUgb2YgW1wiZGlhbGVjdFwiLCBcInNjaGVtYVwiXSBhcyBjb25zdCkge1xuICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvcltuYW1lXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZGVzY3JpcHRvcltuYW1lXSA9IG5vcm1hbGl6ZVBhdGgoZGVzY3JpcHRvcltuYW1lXSwge1xuICAgICAgICBiYXNlcGF0aCxcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJlc291cmNlRGlhbGVjdChkZXNjcmlwdG9yOiBEZXNjcmlwdG9yKSB7XG4gIGlmIChpc0Rlc2NyaXB0b3IoZGVzY3JpcHRvci5kaWFsZWN0KSkge1xuICAgIGRlc2NyaXB0b3IuZGlhbGVjdCA9IG5vcm1hbGl6ZURpYWxlY3QoeyBkZXNjcmlwdG9yOiBkZXNjcmlwdG9yLmRpYWxlY3QgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVSZXNvdXJjZVNjaGVtYShkZXNjcmlwdG9yOiBEZXNjcmlwdG9yKSB7XG4gIGlmIChpc0Rlc2NyaXB0b3IoZGVzY3JpcHRvci5zY2hlbWEpKSB7XG4gICAgZGVzY3JpcHRvci5zY2hlbWEgPSBub3JtYWxpemVTY2hlbWEoeyBkZXNjcmlwdG9yOiBkZXNjcmlwdG9yLnNjaGVtYSB9KVxuICB9XG59XG4iXX0=