ngx-airbrush
Version:
Angular client for jsonapi/Graphiti backends
159 lines • 14.2 kB
JavaScript
/**
* @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) {
if (options === void 0) { options = {}; }
return (/**
* @param {?} target
* @param {?} propertyName
* @return {?}
*/
function (target, propertyName) {
/** @type {?} */
var converter = (/**
* @param {?} propType
* @return {?}
*/
function (propType) {
/** @type {?} */
var attrConverter;
if (options.converter) {
attrConverter = options.converter;
}
else if (propType === Date) {
attrConverter = new DateConverter();
}
else {
/** @type {?} */
var datatype = new propType();
if (datatype.serialize && datatype.deserialize) {
attrConverter = datatype;
}
}
return attrConverter;
});
/** @type {?} */
var convert = (/**
* @param {?} propType
* @param {?} value
* @param {?=} serialize
* @return {?}
*/
function (propType, value, serialize) {
if (serialize === void 0) { serialize = false; }
/** @type {?} */
var attrConverter = converter(propType);
if (attrConverter) {
if (serialize) {
return attrConverter.serialize(value);
}
return attrConverter.deserialize(value);
} // else
return value;
});
/** @type {?} */
var areEquals = (/**
* @param {?} propType
* @param {?} oldValue
* @param {?} newValue
* @return {?}
*/
function (propType, oldValue, newValue) {
/** @type {?} */
var attrConverter = converter(propType);
if (attrConverter) {
if (attrConverter.areEquals) {
return attrConverter.areEquals(oldValue, newValue);
}
// else
/** @type {?} */
var newVal = attrConverter.serialize(newValue);
/** @type {?} */
var oldVal = attrConverter.serialize(oldValue);
return newVal === oldVal;
} // else
return oldValue === newValue;
});
/** @type {?} */
var setupMetadata = (/**
* @return {?}
*/
function () {
/** @type {?} */
var attributes = Reflect.getMetadata(AttributeMetadata, target) || [];
attributes.push({
propertyName: propertyName,
backendName: options.backendName || propertyName,
readonly: !!options.readonly,
converter: options.converter,
});
Reflect.defineMetadata(AttributeMetadata, attributes, target);
});
/** @type {?} */
var setMetadata = (/**
* @param {?} instance
* @param {?} oldValue
* @param {?} newValue
* @return {?}
*/
function (instance, oldValue, newValue) {
/** @type {?} */
var propType = Reflect.getMetadata('design:type', target, propertyName);
instance[AttributeMetadata] = instance[AttributeMetadata] || {};
instance[AttributeMetadata][propertyName] = {
newValue: newValue,
oldValue: oldValue,
backendName: options.backendName || propertyName,
hasDirtyAttributes: !areEquals(propType, oldValue, newValue),
serializedValue: convert(propType, newValue, true),
};
});
/** @type {?} */
var getter = (/**
* @return {?}
*/
function () {
return this["_" + propertyName];
});
/** @type {?} */
var setter = (/**
* @param {?} newVal
* @return {?}
*/
function (newVal) {
/** @type {?} */
var propType = Reflect.getMetadata('design:type', target, propertyName);
/** @type {?} */
var serialized = convert(propType, newVal);
/** @type {?} */
var 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLmRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1haXJicnVzaC8iLCJzb3VyY2VzIjpbImxpYi9kZWNvcmF0b3JzL2F0dHJpYnV0ZS5kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7O0FBSTVELE1BQU0sVUFBVSxTQUFTLENBQUMsT0FBdUM7SUFBdkMsd0JBQUEsRUFBQSxZQUF1QztJQUMvRDs7Ozs7SUFBTyxVQUFDLE1BQVcsRUFBRSxZQUFvQjs7WUFFakMsU0FBUzs7OztRQUFHLFVBQUMsUUFBYTs7Z0JBQzFCLGFBQWdDO1lBRXBDLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtnQkFDckIsYUFBYSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7YUFDbkM7aUJBQU0sSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFO2dCQUM1QixhQUFhLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQzthQUNyQztpQkFBTTs7b0JBQ0MsUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFO2dCQUUvQixJQUFJLFFBQVEsQ0FBQyxTQUFTLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRTtvQkFDOUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztpQkFDMUI7YUFDRjtZQUNELE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQTs7WUFFSyxPQUFPOzs7Ozs7UUFBRyxVQUFDLFFBQWEsRUFBRSxLQUFVLEVBQUUsU0FBaUI7WUFBakIsMEJBQUEsRUFBQSxpQkFBaUI7O2dCQUNyRCxhQUFhLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUV6QyxJQUFJLGFBQWEsRUFBRTtnQkFDakIsSUFBSSxTQUFTLEVBQUU7b0JBQUUsT0FBTyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lC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QUksQ0FBQyxNQUFJLFlBQWMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztZQUN0QyxXQUFXLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUE7UUFFRCxJQUFJLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQy9CLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRTtnQkFDMUMsR0FBRyxFQUFFLE1BQU07Z0JBQ1gsR0FBRyxFQUFFLE1BQU07Z0JBQ1gsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFlBQVksRUFBRSxJQUFJO2FBQ25CLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQyxFQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0dHJpYnV0ZURlY29yYXRvck9wdGlvbnMgfSBmcm9tICcuL29wdGlvbi5pbnRlcmZhY2VzJztcbmltcG9ydCB7IEF0dHJpYnV0ZU1ldGFkYXRhIH0gZnJvbSAnLi9zeW1ib2xlcyc7XG5pbXBvcnQgeyBEYXRlQ29udmVydGVyIH0gZnJvbSAnLi4vY29udmVydGVycy9kYXRlLmNvbnZldGVyJztcbmltcG9ydCB7IFByb3BlcnR5Q29udmVydGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wcm9wZXJ0eS1jb252ZXJ0ZXIuaW50ZXJmYWNlJztcblxuXG5leHBvcnQgZnVuY3Rpb24gQXR0cmlidXRlKG9wdGlvbnM6IEF0dHJpYnV0ZURlY29yYXRvck9wdGlvbnMgPSB7fSk6IFByb3BlcnR5RGVjb3JhdG9yIHtcbiAgcmV0dXJuICh0YXJnZXQ6IGFueSwgcHJvcGVydHlOYW1lOiBzdHJpbmcpID0+IHtcblxuICAgIGNvbnN0IGNvbnZlcnRlciA9IChwcm9wVHlwZTogYW55KTogYW55ID0+IHtcbiAgICAgIGxldCBhdHRyQ29udmVydGVyOiBQcm9wZXJ0eUNvbnZlcnRlcjtcblxuICAgICAgaWYgKG9wdGlvbnMuY29udmVydGVyKSB7XG4gICAgICAgIGF0dHJDb252ZXJ0ZXIgPSBvcHRpb25zLmNvbnZlcnRlcjtcbiAgICAgIH0gZWxzZSBpZiAocHJvcFR5cGUgPT09IERhdGUpIHtcbiAgICAgICAgYXR0ckNvbnZlcnRlciA9IG5ldyBEYXRlQ29udmVydGVyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkYXRhdHlwZSA9IG5ldyBwcm9wVHlwZSgpO1xuXG4gICAgICAgIGlmIChkYXRhdHlwZS5zZXJpYWxpemUgJiYgZGF0YXR5cGUuZGVzZXJpYWxpemUpIHtcbiAgICAgICAgICBhdHRyQ29udmVydGVyID0gZGF0YXR5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhdHRyQ29udmVydGVyO1xuICAgIH07XG5cbiAgICBjb25zdCBjb252ZXJ0ID0gKHByb3BUeXBlOiBhbnksIHZhbHVlOiBhbnksIHNlcmlhbGl6ZSA9IGZhbHNlKTogYW55ID0+IHtcbiAgICAgIGNvbnN0IGF0dHJDb252ZXJ0ZXIgPSBjb252ZXJ0ZXIocHJvcFR5cGUpO1xuXG4gICAgICBpZiAoYXR0ckNvbnZlcnRlcikge1xuICAgICAgICBpZiAoc2VyaWFsaXplKSB7IHJldHVybiBhdHRyQ29udmVydGVyLnNlcmlhbGl6ZSh2YWx1ZSk7IH1cbiAgICAgICAgcmV0dXJuIGF0dHJDb252ZXJ0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgICAgfSAvLyBlbHNlXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcblxuICAgIGNvbnN0IGFyZUVxdWFscyA9IChwcm9wVHlwZTogYW55LCBvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgICBjb25zdCBhdHRyQ29udmVydGVyID0gY29udmVydGVyKHByb3BUeXBlKTtcblxuICAgICAgaWYgKGF0dHJDb252ZXJ0ZXIpIHtcbiAgICAgICAgaWYgKGF0dHJDb252ZXJ0ZXIuYXJlRXF1YWxzKSB7IHJldHVybiBhdHRyQ29udmVydGVyLmFyZUVxdWFscyhvbGRWYWx1ZSwgbmV3VmFsdWUpOyB9XG4gICAgICAgIC8vIGVsc2VcbiAgICAgICAgY29uc3QgbmV3VmFsID0gYXR0ckNvbnZlcnRlci5zZXJpYWxpemUobmV3VmFsdWUpO1xuICAgICAgICBjb25zdCBvbGRWYWwgPSBhdHRyQ29udmVydGVyLnNlcmlhbGl6ZShvbGRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXdWYWwgPT09IG9sZFZhbDtcbiAgICAgIH0gLy8gZWxzZVxuICAgICAgcmV0dXJuIG9sZFZhbHVlID09PSBuZXdWYWx1ZTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXBNZXRhZGF0YSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhKEF0dHJpYnV0ZU1ldGFkYXRhLCB0YXJnZXQpIHx8IFtdO1xuXG4gICAgICBhdHRyaWJ1dGVzLnB1c2goe1xuICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgIGJhY2tlbmROYW1lOiBvcHRpb25zLmJhY2tlbmROYW1lIHx8IHByb3BlcnR5TmFtZSxcbiAgICAgICAgcmVhZG9ubHk6ICEhb3B0aW9ucy5yZWFkb25seSxcbiAgICAgICAgY29udmVydGVyOiBvcHRpb25zLmNvbnZlcnRlcixcbiAgICAgIH0pO1xuXG4gICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKEF0dHJpYnV0ZU1ldGFkYXRhLCBhdHRyaWJ1dGVzLCB0YXJnZXQpO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXRNZXRhZGF0YSA9IChpbnN0YW5jZTogYW55LCBvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KSA9PiB7XG4gICAgICBjb25zdCBwcm9wVHlwZSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ2Rlc2lnbjp0eXBlJywgdGFyZ2V0LCBwcm9wZXJ0eU5hbWUpO1xuXG4gICAgICBpbnN0YW5jZVtBdHRyaWJ1dGVNZXRhZGF0YV0gPSBpbnN0YW5jZVtBdHRyaWJ1dGVNZXRhZGF0YV0gfHwge307XG4gICAgICBpbnN0YW5jZVtBdHRyaWJ1dGVNZXRhZGF0YV1bcHJvcGVydHlOYW1lXSA9IHtcbiAgICAgICAgbmV3VmFsdWUsXG4gICAgICAgIG9sZFZhbHVlLFxuICAgICAgICBiYWNrZW5kTmFtZTogb3B0aW9ucy5iYWNrZW5kTmFtZSB8fCBwcm9wZXJ0eU5hbWUsXG4gICAgICAgIGhhc0RpcnR5QXR0cmlidXRlczogIWFyZUVxdWFscyhwcm9wVHlwZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKSxcbiAgICAgICAgc2VyaWFsaXplZFZhbHVlOiBjb252ZXJ0KHByb3BUeXBlLCBuZXdWYWx1ZSwgdHJ1ZSksXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBnZXR0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzW2BfJHtwcm9wZXJ0eU5hbWV9YF07XG4gICAgfTtcblxuICAgIGNvbnN0IHNldHRlciA9IGZ1bmN0aW9uKG5ld1ZhbDogYW55KSB7XG4gICAgICBjb25zdCBwcm9wVHlwZSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ2Rlc2lnbjp0eXBlJywgdGFyZ2V0LCBwcm9wZXJ0eU5hbWUpO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IGNvbnZlcnQocHJvcFR5cGUsIG5ld1ZhbCk7XG5cbiAgICAgIGxldCBvbGRWYWx1ZSA9IG51bGw7XG4gICAgICBpZiAodGhpcy5pc01vZGVsSW5pdGlhbGl6YXRpb24oKSAmJiB0aGlzLmlkKSB7XG4gICAgICAgIG9sZFZhbHVlID0gc2VyaWFsaXplZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzW0F0dHJpYnV0ZU1ldGFkYXRhXSAmJiB0aGlzW0F0dHJpYnV0ZU1ldGFkYXRhXVtwcm9wZXJ0eU5hbWVdKSB7XG4gICAgICAgICAgb2xkVmFsdWUgPSB0aGlzW0F0dHJpYnV0ZU1ldGFkYXRhXVtwcm9wZXJ0eU5hbWVdLm9sZFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXNbYF8ke3Byb3BlcnR5TmFtZX1gXSA9IHNlcmlhbGl6ZWQ7XG4gICAgICBzZXRNZXRhZGF0YSh0aGlzLCBvbGRWYWx1ZSwgc2VyaWFsaXplZCk7XG4gICAgfTtcblxuICAgIGlmIChkZWxldGUgdGFyZ2V0W3Byb3BlcnR5TmFtZV0pIHtcbiAgICAgIHNldHVwTWV0YWRhdGEoKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5TmFtZSwge1xuICAgICAgICBnZXQ6IGdldHRlcixcbiAgICAgICAgc2V0OiBzZXR0ZXIsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuIl19