@selfage/message
Version:
Runtime lib for generated messages to parse, copy, serialize and deserialize messages.
58 lines • 6.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.copyField = copyField;
exports.copyMessageType = copyMessageType;
exports.copyMessage = copyMessage;
function copyField(from, field, output) {
if (field.primitiveType) {
return from;
}
else if (field.enumType) {
return from;
}
else {
// message type
return copyMessageType(from, field.messageType, output);
}
}
function copyMessageType(from, descriptor, output) {
if (!from) {
return undefined;
}
let ret = output;
if (!ret) {
ret = {};
}
for (let field of descriptor.fields) {
if (from[field.name] === undefined) {
ret[field.name] = undefined;
continue;
}
if (!field.isArray) {
ret[field.name] = copyField(from[field.name], field, ret[field.name]);
}
else {
if (!ret[field.name]) {
ret[field.name] = [];
}
let fromArrayField = from[field.name];
let retArrayField = ret[field.name];
for (let i = 0; i < fromArrayField.length; i++) {
if (i < retArrayField.length) {
retArrayField[i] = copyField(fromArrayField[i], field, retArrayField[i]);
}
else {
retArrayField.push(copyField(fromArrayField[i], field));
}
}
while (retArrayField.length > fromArrayField.length) {
retArrayField.pop();
}
}
}
return ret;
}
function copyMessage(from, descriptor, to) {
return copyMessageType(from, descriptor, to);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29waWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsOEJBU0M7QUFFRCwwQ0E0Q0M7QUFFRCxrQ0FNQztBQS9ERCxTQUFnQixTQUFTLENBQUMsSUFBUyxFQUFFLEtBQW1CLEVBQUUsTUFBWTtJQUNwRSxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7U0FBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7U0FBTSxDQUFDO1FBQ04sZUFBZTtRQUNmLE9BQU8sZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBZ0IsZUFBZSxDQUM3QixJQUFTLEVBQ1QsVUFBZ0MsRUFDaEMsTUFBVTtJQUVWLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLEdBQUcsR0FBUSxNQUFNLENBQUM7SUFDdEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNYLENBQUM7SUFDRCxLQUFLLElBQUksS0FBSyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbkMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7WUFDNUIsU0FBUztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLENBQUM7WUFDRCxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLElBQUksYUFBYSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUM3QixhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUMxQixjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQ2pCLEtBQUssRUFDTCxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQ2pCLENBQUM7Z0JBQ0osQ0FBQztxQkFBTSxDQUFDO29CQUNOLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sYUFBYSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3BELGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFnQixXQUFXLENBQ3pCLElBQU8sRUFDUCxVQUFnQyxFQUNoQyxFQUFNO0lBRU4sT0FBTyxlQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVzc2FnZURlc2NyaXB0b3IsIE1lc3NhZ2VGaWVsZCB9IGZyb20gXCIuL2Rlc2NyaXB0b3JcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlGaWVsZChmcm9tOiBhbnksIGZpZWxkOiBNZXNzYWdlRmllbGQsIG91dHB1dD86IGFueSk6IGFueSB7XG4gIGlmIChmaWVsZC5wcmltaXRpdmVUeXBlKSB7XG4gICAgcmV0dXJuIGZyb207XG4gIH0gZWxzZSBpZiAoZmllbGQuZW51bVR5cGUpIHtcbiAgICByZXR1cm4gZnJvbTtcbiAgfSBlbHNlIHtcbiAgICAvLyBtZXNzYWdlIHR5cGVcbiAgICByZXR1cm4gY29weU1lc3NhZ2VUeXBlKGZyb20sIGZpZWxkLm1lc3NhZ2VUeXBlLCBvdXRwdXQpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5TWVzc2FnZVR5cGU8VD4oXG4gIGZyb206IGFueSxcbiAgZGVzY3JpcHRvcjogTWVzc2FnZURlc2NyaXB0b3I8VD4sXG4gIG91dHB1dD86IFQsXG4pOiBUIHtcbiAgaWYgKCFmcm9tKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCByZXQ6IGFueSA9IG91dHB1dDtcbiAgaWYgKCFyZXQpIHtcbiAgICByZXQgPSB7fTtcbiAgfVxuICBmb3IgKGxldCBmaWVsZCBvZiBkZXNjcmlwdG9yLmZpZWxkcykge1xuICAgIGlmIChmcm9tW2ZpZWxkLm5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtmaWVsZC5uYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghZmllbGQuaXNBcnJheSkge1xuICAgICAgcmV0W2ZpZWxkLm5hbWVdID0gY29weUZpZWxkKGZyb21bZmllbGQubmFtZV0sIGZpZWxkLCByZXRbZmllbGQubmFtZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXJldFtmaWVsZC5uYW1lXSkge1xuICAgICAgICByZXRbZmllbGQubmFtZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIGxldCBmcm9tQXJyYXlGaWVsZCA9IGZyb21bZmllbGQubmFtZV07XG4gICAgICBsZXQgcmV0QXJyYXlGaWVsZCA9IHJldFtmaWVsZC5uYW1lXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJvbUFycmF5RmllbGQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPCByZXRBcnJheUZpZWxkLmxlbmd0aCkge1xuICAgICAgICAgIHJldEFycmF5RmllbGRbaV0gPSBjb3B5RmllbGQoXG4gICAgICAgICAgICBmcm9tQXJyYXlGaWVsZFtpXSxcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgcmV0QXJyYXlGaWVsZFtpXSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldEFycmF5RmllbGQucHVzaChjb3B5RmllbGQoZnJvbUFycmF5RmllbGRbaV0sIGZpZWxkKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlIChyZXRBcnJheUZpZWxkLmxlbmd0aCA+IGZyb21BcnJheUZpZWxkLmxlbmd0aCkge1xuICAgICAgICByZXRBcnJheUZpZWxkLnBvcCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weU1lc3NhZ2U8VD4oXG4gIGZyb206IFQsXG4gIGRlc2NyaXB0b3I6IE1lc3NhZ2VEZXNjcmlwdG9yPFQ+LFxuICB0bz86IFQsXG4pOiBUIHtcbiAgcmV0dXJuIGNvcHlNZXNzYWdlVHlwZShmcm9tLCBkZXNjcmlwdG9yLCB0byk7XG59XG4iXX0=