pretur.clay
Version:
Client-side immutability helper
93 lines • 14.4 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var lodash_1 = require("lodash");
var actions_1 = require("./actions");
var Value = /** @class */ (function () {
function Value(value, error, state, original, identifier) {
if (state === void 0) { state = 'normal'; }
if (value instanceof Value) {
return value;
}
this.identifier = typeof identifier === 'symbol' ? identifier : Symbol();
this.original = original ? original : this;
this.state = state;
this.value = value;
this.error = error;
}
Object.defineProperty(Value.prototype, "modified", {
get: function () {
return this.original !== this;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Value.prototype, "valid", {
get: function () {
return !this.error;
},
enumerable: true,
configurable: true
});
Value.prototype.reduce = function (action) {
if (actions_1.CLAY_CLEAR.is(this.identifier, action)) {
return this.original;
}
if (actions_1.CLAY_REPLACE.is(this.identifier, action)) {
return action.payload;
}
if (actions_1.CLAY_SET_VALUE.is(this.identifier, action)) {
if (!action.payload || this.value === action.payload.value) {
return this;
}
var error = action.payload.resetError ? undefined : this.error;
if (lodash_1.isEqual(this.original.value, action.payload.value) &&
this.original.state === this.state &&
lodash_1.isEqual(this.original.error, error)) {
return this.original;
}
return new Value(action.payload.value, error, this.state, this.original, this.identifier);
}
if (actions_1.CLAY_SET_ERROR.is(this.identifier, action)) {
if (lodash_1.isEqual(this.error, action.payload)) {
return this;
}
if (lodash_1.isEqual(this.original.value, this.value) &&
this.original.state === this.state &&
lodash_1.isEqual(this.original.error, action.payload)) {
return this.original;
}
return new Value(this.value, action.payload, this.state, this.original, this.identifier);
}
if (actions_1.CLAY_SET_STATE.is(this.identifier, action)) {
if (this.state === action.payload) {
return this;
}
if (lodash_1.isEqual(this.original.value, this.value) &&
this.original.state === action.payload &&
lodash_1.isEqual(this.original.error, action.payload)) {
return this.original;
}
return new Value(this.value, this.error, action.payload, this.original, this.identifier);
}
return this;
};
Value.prototype.clear = function (dispatch) {
dispatch(actions_1.CLAY_CLEAR.create.unicast(this.identifier));
};
Value.prototype.replace = function (dispatch, by) {
dispatch(actions_1.CLAY_REPLACE.create.unicast(this.identifier, by));
};
Value.prototype.setValue = function (dispatch, value, resetError) {
if (resetError === void 0) { resetError = true; }
dispatch(actions_1.CLAY_SET_VALUE.create.unicast(this.identifier, { value: value, resetError: resetError }));
};
Value.prototype.setError = function (dispatch, error) {
dispatch(actions_1.CLAY_SET_ERROR.create.unicast(this.identifier, error));
};
Value.prototype.setState = function (dispatch, state) {
dispatch(actions_1.CLAY_SET_STATE.create.unicast(this.identifier, state));
};
return Value;
}());
exports.Value = Value;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFsdWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvVmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpQ0FBaUM7QUFJakMscUNBTW1CO0FBRW5CO0lBT0UsZUFDRSxLQUFRLEVBQ1IsS0FBdUIsRUFDdkIsS0FBdUIsRUFDdkIsUUFBbUIsRUFDbkIsVUFBbUI7UUFGbkIsc0JBQUEsRUFBQSxnQkFBdUI7UUFJdkIsRUFBRSxDQUFDLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDM0IsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sVUFBVSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN6RSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDakQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELHNCQUFXLDJCQUFRO2FBQW5CO1lBQ0UsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDO1FBQ2hDLENBQUM7OztPQUFBO0lBRUQsc0JBQVcsd0JBQUs7YUFBaEI7WUFDRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3JCLENBQUM7OztPQUFBO0lBRU0sc0JBQU0sR0FBYixVQUFjLE1BQW1CO1FBQy9CLEVBQUUsQ0FBQyxDQUFDLG9CQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sQ0FBTyxJQUFJLENB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SSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTSx3QkFBUSxHQUFmLFVBQWdCLFFBQWtCLEVBQUUsS0FBWTtRQUM5QyxRQUFRLENBQUMsd0JBQWMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0gsWUFBQztBQUFELENBQUMsQUFuSUQsSUFtSUM7QUFuSVksc0JBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAncHJldHVyLnZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBBY3Rpb24sIERpc3BhdGNoIH0gZnJvbSAncmVkdWNpYmxlLW5vZGUnO1xyXG5pbXBvcnQgeyBDbGF5LCBTdGF0ZSB9IGZyb20gJy4vY2xheSc7XHJcbmltcG9ydCB7XHJcbiAgQ0xBWV9DTEVBUixcclxuICBDTEFZX1JFUExBQ0UsXHJcbiAgQ0xBWV9TRVRfVkFMVUUsXHJcbiAgQ0xBWV9TRVRfRVJST1IsXHJcbiAgQ0xBWV9TRVRfU1RBVEUsXHJcbn0gZnJvbSAnLi9hY3Rpb25zJztcclxuXHJcbmV4cG9ydCBjbGFzcyBWYWx1ZTxUPiBpbXBsZW1lbnRzIENsYXk8VmFsdWU8VD4+IHtcclxuICBwdWJsaWMgcmVhZG9ubHkgaWRlbnRpZmllcjogc3ltYm9sO1xyXG4gIHB1YmxpYyByZWFkb25seSBvcmlnaW5hbDogdGhpcztcclxuICBwdWJsaWMgcmVhZG9ubHkgc3RhdGU6IFN0YXRlO1xyXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogVDtcclxuICBwdWJsaWMgcmVhZG9ubHkgZXJyb3I6IFZhbGlkYXRpb25FcnJvcjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICB2YWx1ZTogVCxcclxuICAgIGVycm9yPzogVmFsaWRhdGlvbkVycm9yLFxyXG4gICAgc3RhdGU6IFN0YXRlID0gJ25vcm1hbCcsXHJcbiAgICBvcmlnaW5hbD86IFZhbHVlPFQ+LFxyXG4gICAgaWRlbnRpZmllcj86IHN5bWJvbCxcclxuICApIHtcclxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFZhbHVlKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuaWRlbnRpZmllciA9IHR5cGVvZiBpZGVudGlmaWVyID09PSAnc3ltYm9sJyA/IGlkZW50aWZpZXIgOiBTeW1ib2woKTtcclxuICAgIHRoaXMub3JpZ2luYWwgPSBvcmlnaW5hbCA/IDx0aGlzPm9yaWdpbmFsIDogdGhpcztcclxuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbW9kaWZpZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5vcmlnaW5hbCAhPT0gdGhpcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIXRoaXMuZXJyb3I7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVkdWNlKGFjdGlvbjogQWN0aW9uPGFueT4pOiB0aGlzIHtcclxuICAgIGlmIChDTEFZX0NMRUFSLmlzKHRoaXMuaWRlbnRpZmllciwgYWN0aW9uKSkge1xyXG4gICAgICByZXR1cm4gPHRoaXM+dGhpcy5vcmlnaW5hbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoQ0xBWV9SRVBMQUNFLmlzKHRoaXMuaWRlbnRpZmllciwgYWN0aW9uKSkge1xyXG4gICAgICByZXR1cm4gYWN0aW9uLnBheWxvYWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKENMQVlfU0VUX1ZBTFVFLmlzKHRoaXMuaWRlbnRpZmllciwgYWN0aW9uKSkge1xyXG4gICAgICBpZiAoIWFjdGlvbi5wYXlsb2FkIHx8IHRoaXMudmFsdWUgPT09IGFjdGlvbi5wYXlsb2FkLnZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGVycm9yID0gYWN0aW9uLnBheWxvYWQucmVzZXRFcnJvciA/IHVuZGVmaW5lZCA6IHRoaXMuZXJyb3I7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgaXNFcXVhbCh0aGlzLm9yaWdpbmFsLnZhbHVlLCBhY3Rpb24ucGF5bG9hZC52YWx1ZSkgJiZcclxuICAgICAgICB0aGlzLm9yaWdpbmFsLnN0YXRlID09PSB0aGlzLnN0YXRlICYmXHJcbiAgICAgICAgaXNFcXVhbCh0aGlzLm9yaWdpbmFsLmVycm9yLCBlcnJvcilcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIDx0aGlzPnRoaXMub3JpZ2luYWw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiA8dGhpcz5uZXcgVmFsdWUoXHJcbiAgICAgICAgYWN0aW9uLnBheWxvYWQudmFsdWUsXHJcbiAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgdGhpcy5zdGF0ZSxcclxuICAgICAgICB0aGlzLm9yaWdpbmFsLFxyXG4gICAgICAgIHRoaXMuaWRlbnRpZmllcixcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoQ0xBWV9TRVRfRVJST1IuaXModGhpcy5pZGVudGlmaWVyLCBhY3Rpb24pKSB7XHJcbiAgICAgIGlmIChpc0VxdWFsKHRoaXMuZXJyb3IsIGFjdGlvbi5wYXlsb2FkKSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgaXNFcXVhbCh0aGlzLm9yaWdpbmFsLnZhbHVlLCB0aGlzLnZhbHVlKSAmJlxyXG4gICAgICAgIHRoaXMub3JpZ2luYWwuc3RhdGUgPT09IHRoaXMuc3RhdGUgJiZcclxuICAgICAgICBpc0VxdWFsKHRoaXMub3JpZ2luYWwuZXJyb3IsIGFjdGlvbi5wYXlsb2FkKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gPHRoaXM+dGhpcy5vcmlnaW5hbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIDx0aGlzPm5ldyBWYWx1ZShcclxuICAgICAgICB0aGlzLnZhbHVlLFxyXG4gICAgICAgIGFjdGlvbi5wYXlsb2FkLFxyXG4gICAgICAgIHRoaXMuc3RhdGUsXHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbCxcclxuICAgICAgICB0aGlzLmlkZW50aWZpZXIsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKENMQVlfU0VUX1NUQVRFLmlzKHRoaXMuaWRlbnRpZmllciwgYWN0aW9uKSkge1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gYWN0aW9uLnBheWxvYWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIGlzRXF1YWwodGhpcy5vcmlnaW5hbC52YWx1ZSwgdGhpcy52YWx1ZSkgJiZcclxuICAgICAgICB0aGlzLm9yaWdpbmFsLnN0YXRlID09PSBhY3Rpb24ucGF5bG9hZCAmJlxyXG4gICAgICAgIGlzRXF1YWwodGhpcy5vcmlnaW5hbC5lcnJvciwgYWN0aW9uLnBheWxvYWQpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiA8dGhpcz50aGlzLm9yaWdpbmFsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gPHRoaXM+bmV3IFZhbHVlKFxyXG4gICAgICAgIHRoaXMudmFsdWUsXHJcbiAgICAgICAgdGhpcy5lcnJvcixcclxuICAgICAgICBhY3Rpb24ucGF5bG9hZCxcclxuICAgICAgICB0aGlzLm9yaWdpbmFsLFxyXG4gICAgICAgIHRoaXMuaWRlbnRpZmllcixcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhcihkaXNwYXRjaDogRGlzcGF0Y2gpOiB2b2lkIHtcclxuICAgIGRpc3BhdGNoKENMQVlfQ0xFQVIuY3JlYXRlLnVuaWNhc3QodGhpcy5pZGVudGlmaWVyKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVwbGFjZShkaXNwYXRjaDogRGlzcGF0Y2gsIGJ5OiB0aGlzKTogdm9pZCB7XHJcbiAgICBkaXNwYXRjaChDTEFZX1JFUExBQ0UuY3JlYXRlLnVuaWNhc3QodGhpcy5pZGVudGlmaWVyLCBieSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFZhbHVlKGRpc3BhdGNoOiBEaXNwYXRjaCwgdmFsdWU6IFQsIHJlc2V0RXJyb3IgPSB0cnVlKTogdm9pZCB7XHJcbiAgICBkaXNwYXRjaChDTEFZX1NFVF9WQUxVRS5jcmVhdGUudW5pY2FzdCh0aGlzLmlkZW50aWZpZXIsIHsgdmFsdWUsIHJlc2V0RXJyb3IgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEVycm9yKGRpc3BhdGNoOiBEaXNwYXRjaCwgZXJyb3I6IFZhbGlkYXRpb25FcnJvcik6IHZvaWQge1xyXG4gICAgZGlzcGF0Y2goQ0xBWV9TRVRfRVJST1IuY3JlYXRlLnVuaWNhc3QodGhpcy5pZGVudGlmaWVyLCBlcnJvcikpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFN0YXRlKGRpc3BhdGNoOiBEaXNwYXRjaCwgc3RhdGU6IFN0YXRlKTogdm9pZCB7XHJcbiAgICBkaXNwYXRjaChDTEFZX1NFVF9TVEFURS5jcmVhdGUudW5pY2FzdCh0aGlzLmlkZW50aWZpZXIsIHN0YXRlKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==