UNPKG

@data-client/endpoint

Version:

Declarative Network Interface Definitions

70 lines 9.37 kB
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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