UNPKG

@selfage/message

Version:

Runtime lib for generated messages to parse, copy, serialize and deserialize messages.

116 lines 12.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.toIndexed = toIndexed; exports.stringifyMessage = stringifyMessage; exports.parseField = parseField; exports.fromIndexed = fromIndexed; exports.destringifyMessage = destringifyMessage; const descriptor_1 = require("./descriptor"); function toIndexed(message, descriptor) { if (!message) { return undefined; } let indexedMessage = {}; for (let field of descriptor.fields) { if (message[field.name] === undefined) { continue; } if (field.isArray) { let array = []; indexedMessage[field.index] = array; for (let value of message[field.name]) { if (field.messageType) { array.push(toIndexed(value, field.messageType)); } else { array.push(value); } } } else { if (field.messageType) { indexedMessage[field.index] = toIndexed(message[field.name], field.messageType); } else { indexedMessage[field.index] = message[field.name]; } } } return indexedMessage; } function stringifyMessage(message, descriptor) { return JSON.stringify(toIndexed(message, descriptor)); } function parseField(rawField, field) { if (field.primitiveType) { if (field.primitiveType === descriptor_1.PrimitiveType.NUMBER) { if (typeof rawField === "number") { return rawField; } else { return undefined; } } else if (field.primitiveType === descriptor_1.PrimitiveType.BOOLEAN) { if (typeof rawField === "boolean") { return rawField; } else { return undefined; } } else if (field.primitiveType === descriptor_1.PrimitiveType.STRING) { if (typeof rawField === "string") { return rawField; } else { return undefined; } } } else if (field.enumType) { if (typeof rawField === "number") { let enumValueFound = field.enumType.values.find((enumValue) => { return enumValue.value === rawField; }); return enumValueFound ? enumValueFound.value : undefined; } else { return undefined; } } else if (field.messageType) { return fromIndexed(rawField, field.messageType); } } function fromIndexed(indexedMessage, descriptor) { if (!indexedMessage || typeof indexedMessage !== "object") { return undefined; } let ret = {}; for (let field of descriptor.fields) { if (!field.isArray) { ret[field.name] = parseField(indexedMessage[field.index], field); } else if (!Array.isArray(indexedMessage[field.index])) { ret[field.name] = undefined; } else { // field.isArray AND raw[field.name] is array let rawArrayField = indexedMessage[field.index]; let retArrayField = []; ret[field.name] = retArrayField; for (let i = 0; i < rawArrayField.length; i++) { retArrayField.push(parseField(rawArrayField[i], field)); } } } return ret; } function destringifyMessage(raw, descriptor) { if (!raw) { return undefined; } return fromIndexed(JSON.parse(raw), descriptor); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5naWZpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdHJpbmdpZmllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLDhCQW1DQztBQUVELDRDQUtDO0FBRUQsZ0NBaUNDO0FBRUQsa0NBeUJDO0FBRUQsZ0RBUUM7QUFwSEQsNkNBQThFO0FBRTlFLFNBQWdCLFNBQVMsQ0FDdkIsT0FBWSxFQUNaLFVBQWtDO0lBRWxDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLGNBQWMsR0FBUSxFQUFFLENBQUM7SUFDN0IsS0FBSyxJQUFJLEtBQUssSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLFNBQVM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsSUFBSSxLQUFLLEdBQWUsRUFBRSxDQUFDO1lBQzNCLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3BDLEtBQUssSUFBSSxLQUFLLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDdEIsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN0QixjQUFjLENBQUMsS0FB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QUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkUsQ0FBQzthQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZELEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQzlCLENBQUM7YUFBTSxDQUFDO1lBQ04sNkNBQTZDO1lBQzdDLElBQUksYUFBYSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsSUFBSSxhQUFhLEdBQWUsRUFBRSxDQUFDO1lBQ25DLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDO1lBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzlDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzFELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELFNBQWdCLGtCQUFrQixDQUNoQyxHQUE4QixFQUM5QixVQUFnQztJQUVoQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVzc2FnZURlc2NyaXB0b3IsIE1lc3NhZ2VGaWVsZCwgUHJpbWl0aXZlVHlwZSB9IGZyb20gXCIuL2Rlc2NyaXB0b3JcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHRvSW5kZXhlZChcbiAgbWVzc2FnZTogYW55LFxuICBkZXNjcmlwdG9yOiBNZXNzYWdlRGVzY3JpcHRvcjxhbnk+LFxuKTogYW55IHtcbiAgaWYgKCFtZXNzYWdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBpbmRleGVkTWVzc2FnZTogYW55ID0ge307XG4gIGZvciAobGV0IGZpZWxkIG9mIGRlc2NyaXB0b3IuZmllbGRzKSB7XG4gICAgaWYgKG1lc3NhZ2VbZmllbGQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChmaWVsZC5pc0FycmF5KSB7XG4gICAgICBsZXQgYXJyYXk6IEFycmF5PGFueT4gPSBbXTtcbiAgICAgIGluZGV4ZWRNZXNzYWdlW2ZpZWxkLmluZGV4XSA9IGFycmF5O1xuICAgICAgZm9yIChsZXQgdmFsdWUgb2YgbWVzc2FnZVtmaWVsZC5uYW1lXSkge1xuICAgICAgICBpZiAoZmllbGQubWVzc2FnZVR5cGUpIHtcbiAgICAgICAgICBhcnJheS5wdXNoKHRvSW5kZXhlZCh2YWx1ZSwgZmllbGQubWVzc2FnZVR5cGUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcnJheS5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZmllbGQubWVzc2FnZVR5cGUpIHtcbiAgICAgICAgaW5kZXhlZE1lc3NhZ2VbZmllbGQuaW5kZXhdID0gdG9JbmRleGVkKFxuICAgICAgICAgIG1lc3NhZ2VbZmllbGQubmFtZV0sXG4gICAgICAgICAgZmllbGQubWVzc2FnZVR5cGUsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleGVkTWVzc2FnZVtmaWVsZC5pbmRleF0gPSBtZXNzYWdlW2ZpZWxkLm5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gaW5kZXhlZE1lc3NhZ2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlNZXNzYWdlPFQ+KFxuICBtZXNzYWdlOiBULFxuICBkZXNjcmlwdG9yOiBNZXNzYWdlRGVzY3JpcHRvcjxUPixcbik6IHN0cmluZyB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh0b0luZGV4ZWQobWVzc2FnZSwgZGVzY3JpcHRvcikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGaWVsZChyYXdGaWVsZDogYW55LCBmaWVsZDogTWVzc2FnZUZpZWxkKTogYW55IHtcbiAgaWYgKGZpZWxkLnByaW1pdGl2ZVR5cGUpIHtcbiAgICBpZiAoZmllbGQucHJpbWl0aXZlVHlwZSA9PT0gUHJpbWl0aXZlVHlwZS5OVU1CRVIpIHtcbiAgICAgIGlmICh0eXBlb2YgcmF3RmllbGQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIHJhd0ZpZWxkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZpZWxkLnByaW1pdGl2ZVR5cGUgPT09IFByaW1pdGl2ZVR5cGUuQk9PTEVBTikge1xuICAgICAgaWYgKHR5cGVvZiByYXdGaWVsZCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgcmV0dXJuIHJhd0ZpZWxkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZpZWxkLnByaW1pdGl2ZVR5cGUgPT09IFByaW1pdGl2ZVR5cGUuU1RSSU5HKSB7XG4gICAgICBpZiAodHlwZW9mIHJhd0ZpZWxkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByYXdGaWVsZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGZpZWxkLmVudW1UeXBlKSB7XG4gICAgaWYgKHR5cGVvZiByYXdGaWVsZCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgbGV0IGVudW1WYWx1ZUZvdW5kID0gZmllbGQuZW51bVR5cGUudmFsdWVzLmZpbmQoKGVudW1WYWx1ZSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICByZXR1cm4gZW51bVZhbHVlLnZhbHVlID09PSByYXdGaWVsZDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGVudW1WYWx1ZUZvdW5kID8gZW51bVZhbHVlRm91bmQudmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKGZpZWxkLm1lc3NhZ2VUeXBlKSB7XG4gICAgcmV0dXJuIGZyb21JbmRleGVkKHJhd0ZpZWxkLCBmaWVsZC5tZXNzYWdlVHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21JbmRleGVkKFxuICBpbmRleGVkTWVzc2FnZTogQXJyYXk8YW55PixcbiAgZGVzY3JpcHRvcjogTWVzc2FnZURlc2NyaXB0b3I8YW55Pixcbik6IGFueSB7XG4gIGlmICghaW5kZXhlZE1lc3NhZ2UgfHwgdHlwZW9mIGluZGV4ZWRNZXNzYWdlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCByZXQ6IGFueSA9IHt9O1xuICBmb3IgKGxldCBmaWVsZCBvZiBkZXNjcmlwdG9yLmZpZWxkcykge1xuICAgIGlmICghZmllbGQuaXNBcnJheSkge1xuICAgICAgcmV0W2ZpZWxkLm5hbWVdID0gcGFyc2VGaWVsZChpbmRleGVkTWVzc2FnZVtmaWVsZC5pbmRleF0sIGZpZWxkKTtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KGluZGV4ZWRNZXNzYWdlW2ZpZWxkLmluZGV4XSkpIHtcbiAgICAgIHJldFtmaWVsZC5uYW1lXSA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmllbGQuaXNBcnJheSBBTkQgcmF3W2ZpZWxkLm5hbWVdIGlzIGFycmF5XG4gICAgICBsZXQgcmF3QXJyYXlGaWVsZCA9IGluZGV4ZWRNZXNzYWdlW2ZpZWxkLmluZGV4XTtcbiAgICAgIGxldCByZXRBcnJheUZpZWxkOiBBcnJheTxhbnk+ID0gW107XG4gICAgICByZXRbZmllbGQubmFtZV0gPSByZXRBcnJheUZpZWxkO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdBcnJheUZpZWxkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJldEFycmF5RmllbGQucHVzaChwYXJzZUZpZWxkKHJhd0FycmF5RmllbGRbaV0sIGZpZWxkKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXN0cmluZ2lmeU1lc3NhZ2U8VD4oXG4gIHJhdzogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCxcbiAgZGVzY3JpcHRvcjogTWVzc2FnZURlc2NyaXB0b3I8VD4sXG4pOiBUIHtcbiAgaWYgKCFyYXcpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBmcm9tSW5kZXhlZChKU09OLnBhcnNlKHJhdyksIGRlc2NyaXB0b3IpO1xufVxuIl19