UNPKG

@data-client/endpoint

Version:

Declarative Network Interface Definitions

66 lines 9.45 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import { isImmutable, denormalizeImmutable } from './ImmutableUtils.js'; export const normalize = (schema, input, parent, key, args, visit, addEntity, getEntity, checkLoop) => { const object = _extends({}, 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 = _extends({}, 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 _extends({}, 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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0ltbXV0YWJsZSIsImRlbm9ybWFsaXplSW1tdXRhYmxlIiwibm9ybWFsaXplIiwic2NoZW1hIiwiaW5wdXQiLCJwYXJlbnQiLCJrZXkiLCJhcmdzIiwidmlzaXQiLCJhZGRFbnRpdHkiLCJnZXRFbnRpdHkiLCJjaGVja0xvb3AiLCJvYmplY3QiLCJfZXh0ZW5kcyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwibG9jYWxTY2hlbWEiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsImRlbm9ybWFsaXplIiwidW52aXNpdCIsIml0ZW0iLCJvYmplY3RRdWVyeUtleSIsInF1ZXJ5S2V5IiwiZ2V0SW5kZXgiLCJyZXN1bHRPYmplY3QiLCJrIiwiT2JqZWN0U2NoZW1hIiwiY29uc3RydWN0b3IiLCJkZWZpbml0aW9uIiwiZGVmaW5lIiwicmVkdWNlIiwiZW50aXR5U2NoZW1hIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaGVtYXMvT2JqZWN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzSW1tdXRhYmxlLCBkZW5vcm1hbGl6ZUltbXV0YWJsZSB9IGZyb20gJy4vSW1tdXRhYmxlVXRpbHMuanMnO1xuaW1wb3J0IHsgR2V0SW5kZXgsIEdldEVudGl0eSwgVmlzaXQgfSBmcm9tICcuLi9pbnRlcmZhY2UuanMnO1xuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplID0gKFxuICBzY2hlbWE6IGFueSxcbiAgaW5wdXQ6IGFueSxcbiAgcGFyZW50OiBhbnksXG4gIGtleTogYW55LFxuICBhcmdzOiBhbnlbXSxcbiAgdmlzaXQ6IFZpc2l0LFxuICBhZGRFbnRpdHk6IGFueSxcbiAgZ2V0RW50aXR5OiBhbnksXG4gIGNoZWNrTG9vcDogYW55LFxuKSA9PiB7XG4gIGNvbnN0IG9iamVjdCA9IHsgLi4uaW5wdXQgfTtcbiAgT2JqZWN0LmtleXMoc2NoZW1hKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgY29uc3QgbG9jYWxTY2hlbWEgPSBzY2hlbWFba2V5XTtcbiAgICBjb25zdCB2YWx1ZSA9IHZpc2l0KGxvY2FsU2NoZW1hLCBpbnB1dFtrZXldLCBpbnB1dCwga2V5LCBhcmdzKTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVsZXRlIG9iamVjdFtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGVub3JtYWxpemUoXG4gIHNjaGVtYTogYW55LFxuICBpbnB1dDoge30sXG4gIGFyZ3M6IHJlYWRvbmx5IGFueVtdLFxuICB1bnZpc2l0OiAoc2NoZW1hOiBhbnksIGlucHV0OiBhbnkpID0+IGFueSxcbik6IGFueSB7XG4gIGlmIChpc0ltbXV0YWJsZShpbnB1dCkpIHtcbiAgICByZXR1cm4gZGVub3JtYWxpemVJbW11dGFibGUoc2NoZW1hLCBpbnB1dCwgdW52aXNpdCk7XG4gIH1cblxuICBjb25zdCBvYmplY3Q6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7IC4uLmlucHV0IH07XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoc2NoZW1hKSkge1xuICAgIGNvbnN0IGl0ZW0gPSB1bnZpc2l0KHNjaGVtYVtrZXldLCBvYmplY3Rba2V5XSk7XG4gICAgaWYgKG9iamVjdFtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9iamVjdFtrZXldID0gaXRlbTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RRdWVyeUtleShcbiAgc2NoZW1hOiBhbnksXG4gIGFyZ3M6IHJlYWRvbmx5IGFueVtdLFxuICBxdWVyeUtleTogKFxuICAgIHNjaGVtYTogYW55LFxuICAgIGFyZ3M6IGFueSxcbiAgICBnZXRFbnRpdHk6IEdldEVudGl0eSxcbiAgICBnZXRJbmRleDogR2V0SW5kZXgsXG4gICkgPT4gYW55LFxuICBnZXRFbnRpdHk6IEdldEVudGl0eSxcbiAgZ2V0SW5kZXg6IEdldEluZGV4LFxuKSB7XG4gIGNvbnN0IHJlc3VsdE9iamVjdDogYW55ID0ge307XG4gIE9iamVjdC5rZXlzKHNjaGVtYSkuZm9yRWFjaChrID0+IHtcbiAgICByZXN1bHRPYmplY3Rba10gPSBxdWVyeUtleShzY2hlbWFba10sIGFyZ3MsIGdldEVudGl0eSwgZ2V0SW5kZXgpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdE9iamVjdDtcbn1cbi8qKlxuICogUmVwcmVzZW50cyBvYmplY3RzIHdpdGggc3RhdGljYWxseSBrbm93biBtZW1iZXJzXG4gKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9PYmplY3RcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2JqZWN0U2NoZW1hIHtcbiAgcHJvdGVjdGVkIHNjaGVtYTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKGRlZmluaXRpb246IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICB0aGlzLmRlZmluZShkZWZpbml0aW9uKTtcbiAgfVxuXG4gIGRlZmluZShkZWZpbml0aW9uOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgdGhpcy5zY2hlbWEgPSBPYmplY3Qua2V5cyhkZWZpbml0aW9uKS5yZWR1Y2UoKGVudGl0eVNjaGVtYSwga2V5KSA9PiB7XG4gICAgICBjb25zdCBzY2hlbWEgPSBkZWZpbml0aW9uW2tleV07XG4gICAgICByZXR1cm4geyAuLi5lbnRpdHlTY2hlbWEsIFtrZXldOiBzY2hlbWEgfTtcbiAgICB9LCB0aGlzLnNjaGVtYSB8fCB7fSk7XG4gIH1cblxuICBub3JtYWxpemUoXG4gICAgLi4uYXJnczogcmVhZG9ubHkgW1xuICAgICAgaW5wdXQ6IGFueSxcbiAgICAgIHBhcmVudDogYW55LFxuICAgICAga2V5OiBhbnksXG4gICAgICBhcmdzOiBhbnlbXSxcbiAgICAgIHZpc2l0OiBhbnksXG4gICAgICBhZGRFbnRpdHk6IGFueSxcbiAgICAgIGdldEVudGl0eTogYW55LFxuICAgICAgY2hlY2tMb29wOiBhbnksXG4gICAgXVxuICApIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHRoaXMuc2NoZW1hLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGRlbm9ybWFsaXplKFxuICAgIGlucHV0OiB7fSxcbiAgICBhcmdzOiByZWFkb25seSBhbnlbXSxcbiAgICB1bnZpc2l0OiAoc2NoZW1hOiBhbnksIGlucHV0OiBhbnkpID0+IGFueSxcbiAgKTogYW55IHtcbiAgICByZXR1cm4gZGVub3JtYWxpemUodGhpcy5zY2hlbWEsIGlucHV0LCBhcmdzLCB1bnZpc2l0KTtcbiAgfVxuXG4gIHF1ZXJ5S2V5KGFyZ3M6IGFueSwgcXVlcnlLZXk6IGFueSwgZ2V0RW50aXR5OiBhbnksIGdldEluZGV4OiBhbnkpIHtcbiAgICByZXR1cm4gb2JqZWN0UXVlcnlLZXkodGhpcy5zY2hlbWEsIGFyZ3MsIHF1ZXJ5S2V5LCBnZXRFbnRpdHksIGdldEluZGV4KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBU0EsV0FBVyxFQUFFQyxvQkFBb0IsUUFBUSxxQkFBcUI7QUFHdkUsT0FBTyxNQUFNQyxTQUFTLEdBQUdBLENBQ3ZCQyxNQUFXLEVBQ1hDLEtBQVUsRUFDVkMsTUFBVyxFQUNYQyxHQUFRLEVBQ1JDLElBQVcsRUFDWEMsS0FBWSxFQUNaQyxTQUFjLEVBQ2RDLFNBQWMsRUFDZEMsU0FBYyxLQUNYO0VBQ0gsTUFBTUMsTUFBTSxHQUFBQyxRQUFBLEtBQVFULEtBQUssQ0FBRTtFQUMzQlUsTUFBTSxDQUFDQyxJQUFJLENBQUNaLE1BQU0sQ0FBQyxDQUFDYSxPQUFPLENBQUNWLEdBQUcsSUFBSTtJQUNqQyxNQUFNVyxXQUFXLEdBQUdkLE1BQU0sQ0FBQ0csR0FBRyxDQUFDO0lBQy9CLE1BQU1ZLEtBQUssR0FBR1YsS0FBSyxDQUFDUyxXQUFXLEVBQUViLEtBQUssQ0FBQ0UsR0FBRyxDQUFDLEVB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