@data-client/endpoint
Version:
Declarative Network Interface Definitions
70 lines • 9.37 kB
JavaScript
import { isImmutable, denormalizeImmutable } from './ImmutableUtils.js';
export const normalize = (schema, input, parent, key, args, visit, addEntity, getEntity, checkLoop) => {
const object = {
...input
};
Object.keys(schema).forEach(key => {
const localSchema = schema[key];
const value = visit(localSchema, input[key], input, key, args);
if (value === undefined) {
delete object[key];
} else {
object[key] = value;
}
});
return object;
};
export function denormalize(schema, input, args, unvisit) {
if (isImmutable(input)) {
return denormalizeImmutable(schema, input, unvisit);
}
const object = {
...input
};
for (const key of Object.keys(schema)) {
const item = unvisit(schema[key], object[key]);
if (object[key] !== undefined) {
object[key] = item;
}
if (typeof item === 'symbol') {
return item;
}
}
return object;
}
export function objectQueryKey(schema, args, queryKey, getEntity, getIndex) {
const resultObject = {};
Object.keys(schema).forEach(k => {
resultObject[k] = queryKey(schema[k], args, getEntity, getIndex);
});
return resultObject;
}
/**
* Represents objects with statically known members
* @see https://dataclient.io/rest/api/Object
*/
export default class ObjectSchema {
constructor(definition) {
this.schema = void 0;
this.define(definition);
}
define(definition) {
this.schema = Object.keys(definition).reduce((entitySchema, key) => {
const schema = definition[key];
return {
...entitySchema,
[key]: schema
};
}, this.schema || {});
}
normalize(...args) {
return normalize(this.schema, ...args);
}
denormalize(input, args, unvisit) {
return denormalize(this.schema, input, args, unvisit);
}
queryKey(args, queryKey, getEntity, getIndex) {
return objectQueryKey(this.schema, args, queryKey, getEntity, getIndex);
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0ltbXV0YWJsZSIsImRlbm9ybWFsaXplSW1tdXRhYmxlIiwibm9ybWFsaXplIiwic2NoZW1hIiwiaW5wdXQiLCJwYXJlbnQiLCJrZXkiLCJhcmdzIiwidmlzaXQiLCJhZGRFbnRpdHkiLCJnZXRFbnRpdHkiLCJjaGVja0xvb3AiLCJvYmplY3QiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImxvY2FsU2NoZW1hIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJkZW5vcm1hbGl6ZSIsInVudmlzaXQiLCJpdGVtIiwib2JqZWN0UXVlcnlLZXkiLCJxdWVyeUtleSIsImdldEluZGV4IiwicmVzdWx0T2JqZWN0IiwiayIsIk9iamVjdFNjaGVtYSIsImNvbnN0cnVjdG9yIiwiZGVmaW5pdGlvbiIsImRlZmluZSIsInJlZHVjZSIsImVudGl0eVNjaGVtYSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWFzL09iamVjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0ltbXV0YWJsZSwgZGVub3JtYWxpemVJbW11dGFibGUgfSBmcm9tICcuL0ltbXV0YWJsZVV0aWxzLmpzJztcbmltcG9ydCB7IEdldEluZGV4LCBHZXRFbnRpdHksIFZpc2l0IH0gZnJvbSAnLi4vaW50ZXJmYWNlLmpzJztcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZSA9IChcbiAgc2NoZW1hOiBhbnksXG4gIGlucHV0OiBhbnksXG4gIHBhcmVudDogYW55LFxuICBrZXk6IGFueSxcbiAgYXJnczogYW55W10sXG4gIHZpc2l0OiBWaXNpdCxcbiAgYWRkRW50aXR5OiBhbnksXG4gIGdldEVudGl0eTogYW55LFxuICBjaGVja0xvb3A6IGFueSxcbikgPT4ge1xuICBjb25zdCBvYmplY3QgPSB7IC4uLmlucHV0IH07XG4gIE9iamVjdC5rZXlzKHNjaGVtYSkuZm9yRWFjaChrZXkgPT4ge1xuICAgIGNvbnN0IGxvY2FsU2NoZW1hID0gc2NoZW1hW2tleV07XG4gICAgY29uc3QgdmFsdWUgPSB2aXNpdChsb2NhbFNjaGVtYSwgaW5wdXRba2V5XSwgaW5wdXQsIGtleSwgYXJncyk7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSBvYmplY3Rba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb2JqZWN0O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlbm9ybWFsaXplKFxuICBzY2hlbWE6IGFueSxcbiAgaW5wdXQ6IHt9LFxuICBhcmdzOiByZWFkb25seSBhbnlbXSxcbiAgdW52aXNpdDogKHNjaGVtYTogYW55LCBpbnB1dDogYW55KSA9PiBhbnksXG4pOiBhbnkge1xuICBpZiAoaXNJbW11dGFibGUoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGRlbm9ybWFsaXplSW1tdXRhYmxlKHNjaGVtYSwgaW5wdXQsIHVudmlzaXQpO1xuICB9XG5cbiAgY29uc3Qgb2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0geyAuLi5pbnB1dCB9O1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNjaGVtYSkpIHtcbiAgICBjb25zdCBpdGVtID0gdW52aXNpdChzY2hlbWFba2V5XSwgb2JqZWN0W2tleV0pO1xuICAgIGlmIChvYmplY3Rba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvYmplY3Rba2V5XSA9IGl0ZW07XG4gICAgfVxuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0UXVlcnlLZXkoXG4gIHNjaGVtYTogYW55LFxuICBhcmdzOiByZWFkb25seSBhbnlbXSxcbiAgcXVlcnlLZXk6IChcbiAgICBzY2hlbWE6IGFueSxcbiAgICBhcmdzOiBhbnksXG4gICAgZ2V0RW50aXR5OiBHZXRFbnRpdHksXG4gICAgZ2V0SW5kZXg6IEdldEluZGV4LFxuICApID0+IGFueSxcbiAgZ2V0RW50aXR5OiBHZXRFbnRpdHksXG4gIGdldEluZGV4OiBHZXRJbmRleCxcbikge1xuICBjb25zdCByZXN1bHRPYmplY3Q6IGFueSA9IHt9O1xuICBPYmplY3Qua2V5cyhzY2hlbWEpLmZvckVhY2goayA9PiB7XG4gICAgcmVzdWx0T2JqZWN0W2tdID0gcXVlcnlLZXkoc2NoZW1hW2tdLCBhcmdzLCBnZXRFbnRpdHksIGdldEluZGV4KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHRPYmplY3Q7XG59XG4vKipcbiAqIFJlcHJlc2VudHMgb2JqZWN0cyB3aXRoIHN0YXRpY2FsbHkga25vd24gbWVtYmVyc1xuICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvT2JqZWN0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9iamVjdFNjaGVtYSB7XG4gIHByb3RlY3RlZCBzY2hlbWE6IGFueTtcblxuICBjb25zdHJ1Y3RvcihkZWZpbml0aW9uOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgdGhpcy5kZWZpbmUoZGVmaW5pdGlvbik7XG4gIH1cblxuICBkZWZpbmUoZGVmaW5pdGlvbjogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIHRoaXMuc2NoZW1hID0gT2JqZWN0LmtleXMoZGVmaW5pdGlvbikucmVkdWNlKChlbnRpdHlTY2hlbWEsIGtleSkgPT4ge1xuICAgICAgY29uc3Qgc2NoZW1hID0gZGVmaW5pdGlvbltrZXldO1xuICAgICAgcmV0dXJuIHsgLi4uZW50aXR5U2NoZW1hLCBba2V5XTogc2NoZW1hIH07XG4gICAgfSwgdGhpcy5zY2hlbWEgfHwge30pO1xuICB9XG5cbiAgbm9ybWFsaXplKFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFtcbiAgICAgIGlucHV0OiBhbnksXG4gICAgICBwYXJlbnQ6IGFueSxcbiAgICAgIGtleTogYW55LFxuICAgICAgYXJnczogYW55W10sXG4gICAgICB2aXNpdDogYW55LFxuICAgICAgYWRkRW50aXR5OiBhbnksXG4gICAgICBnZXRFbnRpdHk6IGFueSxcbiAgICAgIGNoZWNrTG9vcDogYW55LFxuICAgIF1cbiAgKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh0aGlzLnNjaGVtYSwgLi4uYXJncyk7XG4gIH1cblxuICBkZW5vcm1hbGl6ZShcbiAgICBpbnB1dDoge30sXG4gICAgYXJnczogcmVhZG9ubHkgYW55W10sXG4gICAgdW52aXNpdDogKHNjaGVtYTogYW55LCBpbnB1dDogYW55KSA9PiBhbnksXG4gICk6IGFueSB7XG4gICAgcmV0dXJuIGRlbm9ybWFsaXplKHRoaXMuc2NoZW1hLCBpbnB1dCwgYXJncywgdW52aXNpdCk7XG4gIH1cblxuICBxdWVyeUtleShhcmdzOiBhbnksIHF1ZXJ5S2V5OiBhbnksIGdldEVudGl0eTogYW55LCBnZXRJbmRleDogYW55KSB7XG4gICAgcmV0dXJuIG9iamVjdFF1ZXJ5S2V5KHRoaXMuc2NoZW1hLCBhcmdzLCBxdWVyeUtleSwgZ2V0RW50aXR5LCBnZXRJbmRleCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsV0FBVyxFQUFFQyxvQkFBb0IsUUFBUSxxQkFBcUI7QUFHdkUsT0FBTyxNQUFNQyxTQUFTLEdBQUdBLENBQ3ZCQyxNQUFXLEVBQ1hDLEtBQVUsRUFDVkMsTUFBVyxFQUNYQyxHQUFRLEVBQ1JDLElBQVcsRUFDWEMsS0FBWSxFQUNaQyxTQUFjLEVBQ2RDLFNBQWMsRUFDZEMsU0FBYyxLQUNYO0VBQ0gsTUFBTUMsTUFBTSxHQUFHO0lBQUUsR0FBR1I7RUFBTSxDQUFDO0VBQzNCUyxNQUFNLENBQUNDLElBQUksQ0FBQ1gsTUFBTSxDQUFDLENBQUNZLE9BQU8sQ0FBQ1QsR0FBRyxJQUFJO0lBQ2pDLE1BQU1VLFdBQVcsR0FBR2IsTUFBTSxDQUFDRyxHQUFHLENBQUM7SUFDL0IsTUFBTVcsS0FBSyxHQUFHVCxLQUFLLENBQUNRLFdBQVcsRUFBRVosS0FBSyxDQUFDRSxHQUFHLENBQUMsRUFBRUYsS0FBSyxFQUFF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