@selfage/observable
Version:
Runtime lib for generated observables.
84 lines • 12.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ObservableAssembler = void 0;
const observable_array_1 = require("@selfage/observable_array");
const descriptor_1 = require("./descriptor");
class ObservableAssembler {
constructor(sourceCheckFn, outputNulliyFn, arrayCheckFn, arrayResetFn, arrayPopFn, processPrimitiveType, processEnumType, processMessageType) {
this.sourceCheckFn = sourceCheckFn;
this.outputNulliyFn = outputNulliyFn;
this.arrayCheckFn = arrayCheckFn;
this.arrayResetFn = arrayResetFn;
this.arrayPopFn = arrayPopFn;
this.processPrimitiveType = processPrimitiveType;
this.processEnumType = processEnumType;
this.processMessageType = processMessageType;
}
processObservableType(source, descriptor, output) {
if (!this.sourceCheckFn(source)) {
return this.outputNulliyFn(output);
}
let ret = output;
if (!ret) {
ret = new descriptor.constructor();
}
for (let field of descriptor.fields) {
if (!field.asArray) {
ret[field.name] = this.processField(source[field.name], field, ret[field.name]);
}
else if (!this.arrayCheckFn(source[field.name])) {
this.arrayResetFn(ret, field.name);
}
else {
if (!ret[field.name]) {
switch (field.asArray) {
case descriptor_1.ArrayType.NORMAL:
ret[field.name] = new Array();
break;
case descriptor_1.ArrayType.OBSERVABLE:
ret[field.name] = new observable_array_1.ObservableArray();
break;
}
}
let sourceArrayField = source[field.name];
let retArrayField = ret[field.name];
let i = 0;
for (let element of sourceArrayField) {
if (i < retArrayField.length) {
switch (field.asArray) {
case descriptor_1.ArrayType.NORMAL:
retArrayField[i] = this.processField(element, field, retArrayField[i]);
break;
case descriptor_1.ArrayType.OBSERVABLE:
retArrayField.set(i, this.processField(element, field, retArrayField.get(i)));
break;
}
}
else {
retArrayField.push(this.processField(element, field));
}
i++;
}
this.arrayPopFn(retArrayField, sourceArrayField.length);
}
}
return ret;
}
processField(sourceField, field, outputField) {
if (field.primitiveType) {
let value = this.processPrimitiveType(sourceField, field.primitiveType, outputField);
return value;
}
else if (field.enumType) {
return this.processEnumType(sourceField, field.enumType, outputField);
}
else if (field.messageType) {
return this.processMessageType(sourceField, field.messageType, outputField);
}
else if (field.observableType) {
return this.processObservableType(sourceField, field.observableType, outputField);
}
}
}
exports.ObservableAssembler = ObservableAssembler;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZW1ibGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXNzZW1ibGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGdFQUE0RDtBQU01RCw2Q0FBZ0Y7QUFFaEYsTUFBYSxtQkFBbUI7SUFDOUIsWUFDVSxhQUF1QyxFQUN2QyxjQUFxQyxFQUNyQyxZQUEyQyxFQUMzQyxZQUFtRCxFQUNuRCxVQUE4RCxFQUM5RCxvQkFJQSxFQUNBLGVBSUEsRUFDQSxrQkFJQTtRQW5CQSxrQkFBYSxHQUFiLGFBQWEsQ0FBMEI7UUFDdkMsbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FBQ3JDLGlCQUFZLEdBQVosWUFBWSxDQUErQjtRQUMzQyxpQkFBWSxHQUFaLFlBQVksQ0FBdUM7UUFDbkQsZUFBVSxHQUFWLFVBQVUsQ0FBb0Q7UUFDOUQseUJBQW9CLEdBQXBCLG9CQUFvQixDQUlwQjtRQUNBLG9CQUFlLEdBQWYsZUFBZSxDQUlmO1FBQ0EsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUlsQjtJQUNQLENBQUM7SUFFRyxxQkFBcUIsQ0FDMUIsTUFBVyxFQUNYLFVBQW1DLEVBQ25DLE1BQVU7UUFFVixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMvQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDcEM7UUFFRCxJQUFJLEdBQUcsR0FBUSxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQztRQUNELEtBQUssSUFBSSxLQUFLLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtnQkFDbEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFD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V0FBVyxFQUNYLEtBQUssQ0FBQyxjQUFjLEVBQ3BCLFdBQVcsQ0FDWixDQUFDO1NBQ0g7SUFDSCxDQUFDO0NBQ0Y7QUFwSEQsa0RBb0hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZUFycmF5IH0gZnJvbSBcIkBzZWxmYWdlL29ic2VydmFibGVfYXJyYXlcIjtcbmltcG9ydCB7XG4gIFByaW1pdGl2ZVR5cGUsXG4gIEVudW1EZXNjcmlwdG9yLFxuICBNZXNzYWdlRGVzY3JpcHRvcixcbn0gZnJvbSBcIkBzZWxmYWdlL21lc3NhZ2UvZGVzY3JpcHRvclwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZURlc2NyaXB0b3IsIE9ic2VydmFibGVGaWVsZCwgQXJyYXlUeXBlIH0gZnJvbSBcIi4vZGVzY3JpcHRvclwiO1xuXG5leHBvcnQgY2xhc3MgT2JzZXJ2YWJsZUFzc2VtYmxlciB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNvdXJjZUNoZWNrRm46IChzb3VyY2U6IGFueSkgPT4gYm9vbGVhbixcbiAgICBwcml2YXRlIG91dHB1dE51bGxpeUZuOiAob3V0cHV0PzogYW55KSA9PiBhbnksXG4gICAgcHJpdmF0ZSBhcnJheUNoZWNrRm46IChzb3VyY2VGaWVsZDogYW55KSA9PiBib29sZWFuLFxuICAgIHByaXZhdGUgYXJyYXlSZXNldEZuOiAocmV0OiBhbnksIGZpZWxkTmFtZTogc3RyaW5nKSA9PiB2b2lkLFxuICAgIHByaXZhdGUgYXJyYXlQb3BGbjogKHJldEFycmF5RmllbGQ6IGFueSwgdGFyZ2V0TGVuZ3RoOiBudW1iZXIpID0+IHZvaWQsXG4gICAgcHJpdmF0ZSBwcm9jZXNzUHJpbWl0aXZlVHlwZTogKFxuICAgICAgc291cmNlRmllbGQ6IGFueSxcbiAgICAgIHByaW1pdGl2ZVR5cGU6IFByaW1pdGl2ZVR5cGUsXG4gICAgICBvdXRwdXRGaWVsZD86IGFueVxuICAgICkgPT4gYW55LFxuICAgIHByaXZhdGUgcHJvY2Vzc0VudW1UeXBlOiAoXG4gICAgICBzb3VyY2VGaWVsZDogYW55LFxuICAgICAgZW51bVR5cGU6IEVudW1EZXNjcmlwdG9yPGFueT4sXG4gICAgICBvdXRwdXRGaWVsZD86IGFueVxuICAgICkgPT4gYW55LFxuICAgIHByaXZhdGUgcHJvY2Vzc01lc3NhZ2VUeXBlOiAoXG4gICAgICBzb3VyY2VGaWVsZDogYW55LFxuICAgICAgbWVzc2FnZVR5cGU6IE1lc3NhZ2VEZXNjcmlwdG9yPGFueT4sXG4gICAgICBvdXRwdXRGaWVsZD86IGFueVxuICAgICkgPT4gYW55XG4gICkge31cblxuICBwdWJsaWMgcHJvY2Vzc09ic2VydmFibGVUeXBlPFQ+KFxuICAgIHNvdXJjZTogYW55LFxuICAgIGRlc2NyaXB0b3I6IE9ic2VydmFibGVEZXNjcmlwdG9yPFQ+LFxuICAgIG91dHB1dD86IFRcbiAgKTogVCB7XG4gICAgaWYgKCF0aGlzLnNvdXJjZUNoZWNrRm4oc291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMub3V0cHV0TnVsbGl5Rm4ob3V0cHV0KTtcbiAgICB9XG5cbiAgICBsZXQgcmV0OiBhbnkgPSBvdXRwdXQ7XG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIHJldCA9IG5ldyBkZXNjcmlwdG9yLmNvbnN0cnVjdG9yKCk7XG4gICAgfVxuICAgIGZvciAobGV0IGZpZWxkIG9mIGRlc2NyaXB0b3IuZmllbGRzKSB7XG4gICAgICBpZiAoIWZpZWxkLmFzQXJyYXkpIHtcbiAgICAgICAgcmV0W2ZpZWxkLm5hbWVdID0gdGhpcy5wcm9jZXNzRmllbGQoXG4gICAgICAgICAgc291cmNlW2ZpZWxkLm5hbWVdLFxuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIHJldFtmaWVsZC5uYW1lXVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5hcnJheUNoZWNrRm4oc291cmNlW2ZpZWxkLm5hbWVdKSkge1xuICAgICAgICB0aGlzLmFycmF5UmVzZXRGbihyZXQsIGZpZWxkLm5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFyZXRbZmllbGQubmFtZV0pIHtcbiAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmFzQXJyYXkpIHtcbiAgICAgICAgICAgIGNhc2UgQXJyYXlUeXBlLk5PUk1BTDpcbiAgICAgICAgICAgICAgcmV0W2ZpZWxkLm5hbWVdID0gbmV3IEFycmF5PGFueT4oKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFycmF5VHlwZS5PQlNFUlZBQkxFOlxuICAgICAgICAgICAgICByZXRbZmllbGQubmFtZV0gPSBuZXcgT2JzZXJ2YWJsZUFycmF5PGFueT4oKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBzb3VyY2VBcnJheUZpZWxkID0gc291cmNlW2ZpZWxkLm5hbWVdO1xuICAgICAgICBsZXQgcmV0QXJyYXlGaWVsZCA9IHJldFtmaWVsZC5uYW1lXTtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIHNvdXJjZUFycmF5RmllbGQpIHtcbiAgICAgICAgICBpZiAoaSA8IHJldEFycmF5RmllbGQubGVuZ3RoKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmFzQXJyYXkpIHtcbiAgICAgICAgICAgICAgY2FzZSBBcnJheVR5cGUuTk9STUFMOlxuICAgICAgICAgICAgICAgIHJldEFycmF5RmllbGRbaV0gPSB0aGlzLnByb2Nlc3NGaWVsZChcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgIHJldEFycmF5RmllbGRbaV1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIEFycmF5VHlwZS5PQlNFUlZBQkxFOlxuICAgICAgICAgICAgICAgIHJldEFycmF5RmllbGQuc2V0KFxuICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0ZpZWxkKGVsZW1lbnQsIGZpZWxkLCByZXRBcnJheUZpZWxkLmdldChpKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXRBcnJheUZpZWxkLnB1c2godGhpcy5wcm9jZXNzRmllbGQoZWxlbWVudCwgZmllbGQpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXJyYXlQb3BGbihyZXRBcnJheUZpZWxkLCBzb3VyY2VBcnJheUZpZWxkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NGaWVsZChcbiAgICBzb3VyY2VGaWVsZDogYW55LFxuICAgIGZpZWxkOiBPYnNlcnZhYmxlRmllbGQsXG4gICAgb3V0cHV0RmllbGQ/OiBhbnlcbiAgKTogYW55IHtcbiAgICBpZiAoZmllbGQucHJpbWl0aXZlVHlwZSkge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5wcm9jZXNzUHJpbWl0aXZlVHlwZShcbiAgICAgICAgc291cmNlRmllbGQsXG4gICAgICAgIGZpZWxkLnByaW1pdGl2ZVR5cGUsXG4gICAgICAgIG91dHB1dEZpZWxkXG4gICAgICApO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZW51bVR5cGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NFbnVtVHlwZShzb3VyY2VGaWVsZCwgZmllbGQuZW51bVR5cGUsIG91dHB1dEZpZWxkKTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLm1lc3NhZ2VUeXBlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTWVzc2FnZVR5cGUoXG4gICAgICAgIHNvdXJjZUZpZWxkLFxuICAgICAgICBmaWVsZC5tZXNzYWdlVHlwZSxcbiAgICAgICAgb3V0cHV0RmllbGRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5vYnNlcnZhYmxlVHlwZSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc09ic2VydmFibGVUeXBlKFxuICAgICAgICBzb3VyY2VGaWVsZCxcbiAgICAgICAgZmllbGQub2JzZXJ2YWJsZVR5cGUsXG4gICAgICAgIG91dHB1dEZpZWxkXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19