UNPKG

ngx-airbrush

Version:

Angular client for jsonapi/Graphiti backends

157 lines 14.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { AttributeMetadata } from './symboles'; import { DateConverter } from '../converters/date.conveter'; /** * @param {?=} options * @return {?} */ export function Attribute(options = {}) { return (/** * @param {?} target * @param {?} propertyName * @return {?} */ (target, propertyName) => { /** @type {?} */ const converter = (/** * @param {?} propType * @return {?} */ (propType) => { /** @type {?} */ let attrConverter; if (options.converter) { attrConverter = options.converter; } else if (propType === Date) { attrConverter = new DateConverter(); } else { /** @type {?} */ const datatype = new propType(); if (datatype.serialize && datatype.deserialize) { attrConverter = datatype; } } return attrConverter; }); /** @type {?} */ const convert = (/** * @param {?} propType * @param {?} value * @param {?=} serialize * @return {?} */ (propType, value, serialize = false) => { /** @type {?} */ const attrConverter = converter(propType); if (attrConverter) { if (serialize) { return attrConverter.serialize(value); } return attrConverter.deserialize(value); } // else return value; }); /** @type {?} */ const areEquals = (/** * @param {?} propType * @param {?} oldValue * @param {?} newValue * @return {?} */ (propType, oldValue, newValue) => { /** @type {?} */ const attrConverter = converter(propType); if (attrConverter) { if (attrConverter.areEquals) { return attrConverter.areEquals(oldValue, newValue); } // else /** @type {?} */ const newVal = attrConverter.serialize(newValue); /** @type {?} */ const oldVal = attrConverter.serialize(oldValue); return newVal === oldVal; } // else return oldValue === newValue; }); /** @type {?} */ const setupMetadata = (/** * @return {?} */ () => { /** @type {?} */ const attributes = Reflect.getMetadata(AttributeMetadata, target) || []; attributes.push({ propertyName, backendName: options.backendName || propertyName, readonly: !!options.readonly, converter: options.converter, }); Reflect.defineMetadata(AttributeMetadata, attributes, target); }); /** @type {?} */ const setMetadata = (/** * @param {?} instance * @param {?} oldValue * @param {?} newValue * @return {?} */ (instance, oldValue, newValue) => { /** @type {?} */ const propType = Reflect.getMetadata('design:type', target, propertyName); instance[AttributeMetadata] = instance[AttributeMetadata] || {}; instance[AttributeMetadata][propertyName] = { newValue, oldValue, backendName: options.backendName || propertyName, hasDirtyAttributes: !areEquals(propType, oldValue, newValue), serializedValue: convert(propType, newValue, true), }; }); /** @type {?} */ const getter = (/** * @return {?} */ function () { return this[`_${propertyName}`]; }); /** @type {?} */ const setter = (/** * @param {?} newVal * @return {?} */ function (newVal) { /** @type {?} */ const propType = Reflect.getMetadata('design:type', target, propertyName); /** @type {?} */ const serialized = convert(propType, newVal); /** @type {?} */ let oldValue = null; if (this.isModelInitialization() && this.id) { oldValue = serialized; } else { if (this[AttributeMetadata] && this[AttributeMetadata][propertyName]) { oldValue = this[AttributeMetadata][propertyName].oldValue; } } this[`_${propertyName}`] = serialized; setMetadata(this, oldValue, serialized); }); if (delete target[propertyName]) { setupMetadata(); Object.defineProperty(target, propertyName, { get: getter, set: setter, enumerable: true, configurable: true }); } }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLmRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1haXJicnVzaC8iLCJzb3VyY2VzIjpbImxpYi9kZWNvcmF0b3JzL2F0dHJpYnV0ZS5kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7O0FBSTVELE1BQU0sVUFBVSxTQUFTLENBQUMsVUFBcUMsRUFBRTtJQUMvRDs7Ozs7SUFBTyxDQUFDLE1BQVcsRUFBRSxZQUFvQixFQUFFLEVBQUU7O2NBRXJDLFNBQVM7Ozs7UUFBRyxDQUFDLFFBQWEsRUFBTyxFQUFFOztnQkFDbkMsYUFBZ0M7WUFFcEMsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO2dCQUNyQixhQUFhLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQzthQUNuQztpQkFBTSxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7Z0JBQzVCLGFBQWEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO2FBQ3JDO2lCQUFNOztzQkFDQyxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUU7Z0JBRS9CLElBQUksUUFBUSxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFO29CQUM5QyxhQUFhLEdBQUcsUUFBUSxDQUFDO2lCQUMxQjthQUNGO1lBQ0QsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQyxDQUFBOztjQUVLLE9BQU87Ozs7OztRQUFHLENBQUMsUUFBYSxFQUFFLEtBQVUsRUFBRSxTQUFTLEdBQUcsS0FBSyxFQUFPLEVBQUU7O2tCQUM5RCxhQUFhLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUV6QyxJQUFJLGFBQWEsRUFBRTtnQkFDakIsSUFBSSxTQUFTLEVBQUU7b0JBQUUsT0FBTyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUFF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QkFDM0Q7YUFDRjtZQUVELElBQUksQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDO1lBQ3RDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQTtRQUVELElBQUksT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDL0IsYUFBYSxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFO2dCQUMxQyxHQUFHLEVBQUUsTUFBTTtnQkFDWCxHQUFHLEVBQUUsTUFBTTtnQkFDWCxVQUFVLEVBQUUsSUFBSTtnQkFDaEIsWUFBWSxFQUFFLElBQUk7YUFDbkIsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDLEVBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXR0cmlidXRlRGVjb3JhdG9yT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9uLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgQXR0cmlidXRlTWV0YWRhdGEgfSBmcm9tICcuL3N5bWJvbGVzJztcbmltcG9ydCB7IERhdGVDb252ZXJ0ZXIgfSBmcm9tICcuLi9jb252ZXJ0ZXJzL2RhdGUuY29udmV0ZXInO1xuaW1wb3J0IHsgUHJvcGVydHlDb252ZXJ0ZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3Byb3BlcnR5LWNvbnZlcnRlci5pbnRlcmZhY2UnO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBBdHRyaWJ1dGUob3B0aW9uczogQXR0cmlidXRlRGVjb3JhdG9yT3B0aW9ucyA9IHt9KTogUHJvcGVydHlEZWNvcmF0b3Ige1xuICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eU5hbWU6IHN0cmluZykgPT4ge1xuXG4gICAgY29uc3QgY29udmVydGVyID0gKHByb3BUeXBlOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgbGV0IGF0dHJDb252ZXJ0ZXI6IFByb3BlcnR5Q29udmVydGVyO1xuXG4gICAgICBpZiAob3B0aW9ucy5jb252ZXJ0ZXIpIHtcbiAgICAgICAgYXR0ckNvbnZlcnRlciA9IG9wdGlvbnMuY29udmVydGVyO1xuICAgICAgfSBlbHNlIGlmIChwcm9wVHlwZSA9PT0gRGF0ZSkge1xuICAgICAgICBhdHRyQ29udmVydGVyID0gbmV3IERhdGVDb252ZXJ0ZXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRhdGF0eXBlID0gbmV3IHByb3BUeXBlKCk7XG5cbiAgICAgICAgaWYgKGRhdGF0eXBlLnNlcmlhbGl6ZSAmJiBkYXRhdHlwZS5kZXNlcmlhbGl6ZSkge1xuICAgICAgICAgIGF0dHJDb252ZXJ0ZXIgPSBkYXRhdHlwZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGF0dHJDb252ZXJ0ZXI7XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnZlcnQgPSAocHJvcFR5cGU6IGFueSwgdmFsdWU6IGFueSwgc2VyaWFsaXplID0gZmFsc2UpOiBhbnkgPT4ge1xuICAgICAgY29uc3QgYXR0ckNvbnZlcnRlciA9IGNvbnZlcnRlcihwcm9wVHlwZSk7XG5cbiAgICAgIGlmIChhdHRyQ29udmVydGVyKSB7XG4gICAgICAgIGlmIChzZXJpYWxpemUpIHsgcmV0dXJuIGF0dHJDb252ZXJ0ZXIuc2VyaWFsaXplKHZhbHVlKTsgfVxuICAgICAgICByZXR1cm4gYXR0ckNvbnZlcnRlci5kZXNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgICB9IC8vIGVsc2VcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgYXJlRXF1YWxzID0gKHByb3BUeXBlOiBhbnksIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICAgIGNvbnN0IGF0dHJDb252ZXJ0ZXIgPSBjb252ZXJ0ZXIocHJvcFR5cGUpO1xuXG4gICAgICBpZiAoYXR0ckNvbnZlcnRlcikge1xuICAgICAgICBpZiAoYXR0ckNvbnZlcnRlci5hcmVFcXVhbHMpIHsgcmV0dXJuIGF0dHJDb252ZXJ0ZXIuYXJlRXF1YWxzKG9sZFZhbHVlLCBuZXdWYWx1ZSk7IH1cbiAgICAgICAgLy8gZWxzZVxuICAgICAgICBjb25zdCBuZXdWYWwgPSBhdHRyQ29udmVydGVyLnNlcmlhbGl6ZShuZXdWYWx1ZSk7XG4gICAgICAgIGNvbnN0IG9sZFZhbCA9IGF0dHJDb252ZXJ0ZXIuc2VyaWFsaXplKG9sZFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ld1ZhbCA9PT0gb2xkVmFsO1xuICAgICAgfSAvLyBlbHNlXG4gICAgICByZXR1cm4gb2xkVmFsdWUgPT09IG5ld1ZhbHVlO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXR1cE1ldGFkYXRhID0gKCkgPT4ge1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoQXR0cmlidXRlTWV0YWRhdGEsIHRhcmdldCkgfHwgW107XG5cbiAgICAgIGF0dHJpYnV0ZXMucHVzaCh7XG4gICAgICAgIHByb3BlcnR5TmFtZSxcbiAgICAgICAgYmFja2VuZE5hbWU6IG9wdGlvbnMuYmFja2VuZE5hbWUgfHwgcHJvcGVydHlOYW1lLFxuICAgICAgICByZWFkb25seTogISFvcHRpb25zLnJlYWRvbmx5LFxuICAgICAgICBjb252ZXJ0ZXI6IG9wdGlvbnMuY29udmVydGVyLFxuICAgICAgfSk7XG5cbiAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQXR0cmlidXRlTWV0YWRhdGEsIGF0dHJpYnV0ZXMsIHRhcmdldCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNldE1ldGFkYXRhID0gKGluc3RhbmNlOiBhbnksIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHByb3BUeXBlID0gUmVmbGVjdC5nZXRNZXRhZGF0YSgnZGVzaWduOnR5cGUnLCB0YXJnZXQsIHByb3BlcnR5TmFtZSk7XG5cbiAgICAgIGluc3RhbmNlW0F0dHJpYnV0ZU1ldGFkYXRhXSA9IGluc3RhbmNlW0F0dHJpYnV0ZU1ldGFkYXRhXSB8fCB7fTtcbiAgICAgIGluc3RhbmNlW0F0dHJpYnV0ZU1ldGFkYXRhXVtwcm9wZXJ0eU5hbWVdID0ge1xuICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgb2xkVmFsdWUsXG4gICAgICAgIGJhY2tlbmROYW1lOiBvcHRpb25zLmJhY2tlbmROYW1lIHx8IHByb3BlcnR5TmFtZSxcbiAgICAgICAgaGFzRGlydHlBdHRyaWJ1dGVzOiAhYXJlRXF1YWxzKHByb3BUeXBlLCBvbGRWYWx1ZSwgbmV3VmFsdWUpLFxuICAgICAgICBzZXJpYWxpemVkVmFsdWU6IGNvbnZlcnQocHJvcFR5cGUsIG5ld1ZhbHVlLCB0cnVlKSxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGdldHRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXNbYF8ke3Byb3BlcnR5TmFtZX1gXTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dGVyID0gZnVuY3Rpb24obmV3VmFsOiBhbnkpIHtcbiAgICAgIGNvbnN0IHByb3BUeXBlID0gUmVmbGVjdC5nZXRNZXRhZGF0YSgnZGVzaWduOnR5cGUnLCB0YXJnZXQsIHByb3BlcnR5TmFtZSk7XG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gY29udmVydChwcm9wVHlwZSwgbmV3VmFsKTtcblxuICAgICAgbGV0IG9sZFZhbHVlID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLmlzTW9kZWxJbml0aWFsaXphdGlvbigpICYmIHRoaXMuaWQpIHtcbiAgICAgICAgb2xkVmFsdWUgPSBzZXJpYWxpemVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXNbQXR0cmlidXRlTWV0YWRhdGFdICYmIHRoaXNbQXR0cmlidXRlTWV0YWRhdGFdW3Byb3BlcnR5TmFtZV0pIHtcbiAgICAgICAgICBvbGRWYWx1ZSA9IHRoaXNbQXR0cmlidXRlTWV0YWRhdGFdW3Byb3BlcnR5TmFtZV0ub2xkVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpc1tgXyR7cHJvcGVydHlOYW1lfWBdID0gc2VyaWFsaXplZDtcbiAgICAgIHNldE1ldGFkYXRhKHRoaXMsIG9sZFZhbHVlLCBzZXJpYWxpemVkKTtcbiAgICB9O1xuXG4gICAgaWYgKGRlbGV0ZSB0YXJnZXRbcHJvcGVydHlOYW1lXSkge1xuICAgICAgc2V0dXBNZXRhZGF0YSgpO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlOYW1lLCB7XG4gICAgICAgIGdldDogZ2V0dGVyLFxuICAgICAgICBzZXQ6IHNldHRlcixcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG4iXX0=