@selfage/generator_cli
Version: 
Code generation for message, service, and database.
87 lines (86 loc) • 13.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateMessage = generateMessage;
const output_content_builder_1 = require("./output_content_builder");
const util_1 = require("./util");
let PRIMITIVE_TYPES = new Set(["string", "number", "boolean"]);
function generateMessage(definitionModulePath, messageDefinition, definitionResolver, outputContentMap) {
    if (!messageDefinition.name) {
        throw new Error(`"name" field is missing on a message.`);
    }
    let loggingPrefix = `When generating message ${messageDefinition.name},`;
    let tsContentBuilder = output_content_builder_1.TsContentBuilder.get(outputContentMap, definitionModulePath);
    let fields = new Array();
    let fieldDescriptors = new Array();
    if (messageDefinition.fields) {
        let usedIndexes = new Set();
        for (let field of messageDefinition.fields) {
            if (!field.name) {
                throw new Error(`${loggingPrefix} "name" is missing on a field.`);
            }
            if (!field.type) {
                throw new Error(`${loggingPrefix} "type" is missing on ${field.name}.`);
            }
            if (!field.index) {
                throw new Error(`${loggingPrefix} "index" is missing on field ${field.name}.`);
            }
            if (usedIndexes.has(field.index)) {
                throw new Error(`${loggingPrefix} field ${field.name} has a duplicate index ${field.index}.`);
            }
            usedIndexes.add(field.index);
        }
        messageDefinition.fields.sort((a, b) => a.index - b.index);
        for (let field of messageDefinition.fields) {
            let typeDescriptorLine;
            if (PRIMITIVE_TYPES.has(field.type)) {
                tsContentBuilder.importFromMessageDescriptor("PrimitiveType");
                typeDescriptorLine = `primitiveType: PrimitiveType.${field.type.toUpperCase()}`;
            }
            else {
                let definition = definitionResolver.resolve(loggingPrefix, field.type, field.import);
                if (definition.kind === "Enum") {
                    let enumDescriptorName = (0, util_1.toUppercaseSnaked)(field.type);
                    tsContentBuilder.importFromDefinition(field.import, field.type, enumDescriptorName);
                    typeDescriptorLine = `enumType: ${enumDescriptorName}`;
                }
                else if (definition.kind === "Message") {
                    let messageDescriptorName = (0, util_1.toUppercaseSnaked)(field.type);
                    tsContentBuilder.importFromDefinition(field.import, field.type, messageDescriptorName);
                    typeDescriptorLine = `messageType: ${messageDescriptorName}`;
                }
                else {
                    throw new Error(`${loggingPrefix} a new definition needs to be handled for type ${field.type} of field ${field.name}.`);
                }
            }
            let fieldTypeName;
            let isArrayLine;
            if (field.isArray) {
                fieldTypeName = `Array<${field.type}>`;
                isArrayLine = `isArray: true`;
            }
            else {
                fieldTypeName = field.type;
            }
            fieldDescriptors.push(`{
    name: '${field.name}',
    index: ${field.index},
    ${typeDescriptorLine},${isArrayLine ? "\n    " + isArrayLine + "," : ""}
  }`);
            if (!field.deprecated) {
                fields.push(`
  ${field.name}?: ${fieldTypeName},`);
            }
        }
    }
    tsContentBuilder.importFromMessageDescriptor("MessageDescriptor");
    let descriptorName = (0, util_1.toUppercaseSnaked)(messageDefinition.name);
    tsContentBuilder.push(`
export interface ${messageDefinition.name} {${fields.join("")}
}
export let ${descriptorName}: MessageDescriptor<${messageDefinition.name}> = {
  name: '${messageDefinition.name}',
  fields: [${fieldDescriptors.join(", ")}],
};
`);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZV9nZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtZXNzYWdlX2dlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVVBLDBDQXdHQztBQWhIRCxxRUFHa0M7QUFDbEMsaUNBQTJDO0FBRTNDLElBQUksZUFBZSxHQUFHLElBQUksR0FBRyxDQUFTLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBRXZFLFNBQWdCLGVBQWUsQ0FDN0Isb0JBQTRCLEVBQzVCLGlCQUFvQyxFQUNwQyxrQkFBc0MsRUFDdEMsZ0JBQW1EO0lBRW5ELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELElBQUksYUFBYSxHQUFHLDJCQUEyQixpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUN6RSxJQUFJLGdCQUFnQixHQUFHLHlDQUFnQixDQUFDLEdBQUcsQ0FDekMsZ0JBQWdCLEVBQ2hCLG9CQUFvQixDQUNyQixDQUFDO0lBQ0YsSUFBSSxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztJQUNqQyxJQUFJLGdCQUFnQixHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7SUFDM0MsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM3QixJQUFJLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQ3BDLEtBQUssSUFBSSxLQUFLLElBQUksaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLGFBQWEsZ0NBQWdDLENBQUMsQ0FBQztZQUNwRSxDQUFDO1lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFD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QUFDO2FBQ2YsS0FBSyxDQUFDLElBQUk7YUFDVixLQUFLLENBQUMsS0FBSztNQUNsQixrQkFBa0IsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxXQUFXLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ3ZFLENBQUMsQ0FBQztZQUNBLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDaEIsS0FBSyxDQUFDLElBQUksTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLDJCQUEyQixDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDbEUsSUFBSSxjQUFjLEdBQUcsSUFBQSx3QkFBaUIsRUFBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7bUJBQ0wsaUJBQWlCLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDOzs7YUFHaEQsY0FBYyx1QkFBdUIsaUJBQWlCLENBQUMsSUFBSTtXQUM3RCxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3BCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7O0NBRXZDLENBQUMsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZXNzYWdlRGVmaW5pdGlvbiB9IGZyb20gXCIuL2RlZmluaXRpb25cIjtcbmltcG9ydCB7IERlZmluaXRpb25SZXNvbHZlciB9IGZyb20gXCIuL2RlZmluaXRpb25fcmVzb2x2ZXJcIjtcbmltcG9ydCB7XG4gIE91dHB1dENvbnRlbnRCdWlsZGVyLFxuICBUc0NvbnRlbnRCdWlsZGVyLFxufSBmcm9tIFwiLi9vdXRwdXRfY29udGVudF9idWlsZGVyXCI7XG5pbXBvcnQgeyB0b1VwcGVyY2FzZVNuYWtlZCB9IGZyb20gXCIuL3V0aWxcIjtcblxubGV0IFBSSU1JVElWRV9UWVBFUyA9IG5ldyBTZXQ8c3RyaW5nPihbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJib29sZWFuXCJdKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTWVzc2FnZShcbiAgZGVmaW5pdGlvbk1vZHVsZVBhdGg6IHN0cmluZyxcbiAgbWVzc2FnZURlZmluaXRpb246IE1lc3NhZ2VEZWZpbml0aW9uLFxuICBkZWZpbml0aW9uUmVzb2x2ZXI6IERlZmluaXRpb25SZXNvbHZlcixcbiAgb3V0cHV0Q29udGVudE1hcDogTWFwPHN0cmluZywgT3V0cHV0Q29udGVudEJ1aWxkZXI+LFxuKTogdm9pZCB7XG4gIGlmICghbWVzc2FnZURlZmluaXRpb24ubmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgXCJuYW1lXCIgZmllbGQgaXMgbWlzc2luZyBvbiBhIG1lc3NhZ2UuYCk7XG4gIH1cblxuICBsZXQgbG9nZ2luZ1ByZWZpeCA9IGBXaGVuIGdlbmVyYXRpbmcgbWVzc2FnZSAke21lc3NhZ2VEZWZpbml0aW9uLm5hbWV9LGA7XG4gIGxldCB0c0NvbnRlbnRCdWlsZGVyID0gVHNDb250ZW50QnVpbGRlci5nZXQoXG4gICAgb3V0cHV0Q29udGVudE1hcCxcbiAgICBkZWZpbml0aW9uTW9kdWxlUGF0aCxcbiAgKTtcbiAgbGV0IGZpZWxkcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIGxldCBmaWVsZERlc2NyaXB0b3JzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgaWYgKG1lc3NhZ2VEZWZpbml0aW9uLmZpZWxkcykge1xuICAgIGxldCB1c2VkSW5kZXhlcyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICAgIGZvciAobGV0IGZpZWxkIG9mIG1lc3NhZ2VEZWZpbml0aW9uLmZpZWxkcykge1xuICAgICAgaWYgKCFmaWVsZC5uYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtsb2dnaW5nUHJlZml4fSBcIm5hbWVcIiBpcyBtaXNzaW5nIG9uIGEgZmllbGQuYCk7XG4gICAgICB9XG4gICAgICBpZiAoIWZpZWxkLnR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2xvZ2dpbmdQcmVmaXh9IFwidHlwZVwiIGlzIG1pc3Npbmcgb24gJHtmaWVsZC5uYW1lfS5gKTtcbiAgICAgIH1cbiAgICAgIGlmICghZmllbGQuaW5kZXgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGAke2xvZ2dpbmdQcmVmaXh9IFwiaW5kZXhcIiBpcyBtaXNzaW5nIG9uIGZpZWxkICR7ZmllbGQubmFtZX0uYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh1c2VkSW5kZXhlcy5oYXMoZmllbGQuaW5kZXgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHtsb2dnaW5nUHJlZml4fSBmaWVsZCAke2ZpZWxkLm5hbWV9IGhhcyBhIGR1cGxpY2F0ZSBpbmRleCAke2ZpZWxkLmluZGV4fS5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdXNlZEluZGV4ZXMuYWRkKGZpZWxkLmluZGV4KTtcbiAgICB9XG4gICAgbWVzc2FnZURlZmluaXRpb24uZmllbGRzLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcblxuICAgIGZvciAobGV0IGZpZWxkIG9mIG1lc3NhZ2VEZWZpbml0aW9uLmZpZWxkcykge1xuICAgICAgbGV0IHR5cGVEZXNjcmlwdG9yTGluZTogc3RyaW5nO1xuICAgICAgaWYgKFBSSU1JVElWRV9UWVBFUy5oYXMoZmllbGQudHlwZSkpIHtcbiAgICAgICAgdHNDb250ZW50QnVpbGRlci5pbXBvcnRGcm9tTWVzc2FnZURlc2NyaXB0b3IoXCJQcmltaXRpdmVUeXBlXCIpO1xuICAgICAgICB0eXBlRGVzY3JpcHRvckxpbmUgPSBgcHJpbWl0aXZlVHlwZTogUHJpbWl0aXZlVHlwZS4ke2ZpZWxkLnR5cGUudG9VcHBlckNhc2UoKX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGRlZmluaXRpb24gPSBkZWZpbml0aW9uUmVzb2x2ZXIucmVzb2x2ZShcbiAgICAgICAgICBsb2dnaW5nUHJlZml4LFxuICAgICAgICAgIGZpZWxkLnR5cGUsXG4gICAgICAgICAgZmllbGQuaW1wb3J0LFxuICAgICAgICApO1xuICAgICAgICBpZiAoZGVmaW5pdGlvbi5raW5kID09PSBcIkVudW1cIikge1xuICAgICAgICAgIGxldCBlbnVtRGVzY3JpcHRvck5hbWUgPSB0b1VwcGVyY2FzZVNuYWtlZChmaWVsZC50eXBlKTtcbiAgICAgICAgICB0c0NvbnRlbnRCdWlsZGVyLmltcG9ydEZyb21EZWZpbml0aW9uKFxuICAgICAgICAgICAgZmllbGQuaW1wb3J0LFxuICAgICAgICAgICAgZmllbGQudHlwZSxcbiAgICAgICAgICAgIGVudW1EZXNjcmlwdG9yTmFtZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHR5cGVEZXNjcmlwdG9yTGluZSA9IGBlbnVtVHlwZTogJHtlbnVtRGVzY3JpcHRvck5hbWV9YDtcbiAgICAgICAgfSBlbHNlIGlmIChkZWZpbml0aW9uLmtpbmQgPT09IFwiTWVzc2FnZVwiKSB7XG4gICAgICAgICAgbGV0IG1lc3NhZ2VEZXNjcmlwdG9yTmFtZSA9IHRvVXBwZXJjYXNlU25ha2VkKGZpZWxkLnR5cGUpO1xuICAgICAgICAgIHRzQ29udGVudEJ1aWxkZXIuaW1wb3J0RnJvbURlZmluaXRpb24oXG4gICAgICAgICAgICBmaWVsZC5pbXBvcnQsXG4gICAgICAgICAgICBmaWVsZC50eXBlLFxuICAgICAgICAgICAgbWVzc2FnZURlc2NyaXB0b3JOYW1lLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdHlwZURlc2NyaXB0b3JMaW5lID0gYG1lc3NhZ2VUeXBlOiAke21lc3NhZ2VEZXNjcmlwdG9yTmFtZX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGAke2xvZ2dpbmdQcmVmaXh9IGEgbmV3IGRlZmluaXRpb24gbmVlZHMgdG8gYmUgaGFuZGxlZCBmb3IgdHlwZSAke2ZpZWxkLnR5cGV9IG9mIGZpZWxkICR7ZmllbGQubmFtZX0uYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgZmllbGRUeXBlTmFtZTogc3RyaW5nO1xuICAgICAgbGV0IGlzQXJyYXlMaW5lOiBzdHJpbmc7XG4gICAgICBpZiAoZmllbGQuaXNBcnJheSkge1xuICAgICAgICBmaWVsZFR5cGVOYW1lID0gYEFycmF5PCR7ZmllbGQudHlwZX0+YDtcbiAgICAgICAgaXNBcnJheUxpbmUgPSBgaXNBcnJheTogdHJ1ZWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWVsZFR5cGVOYW1lID0gZmllbGQudHlwZTtcbiAgICAgIH1cbiAgICAgIGZpZWxkRGVzY3JpcHRvcnMucHVzaChge1xuICAgIG5hbWU6ICcke2ZpZWxkLm5hbWV9JyxcbiAgICBpbmRleDogJHtmaWVsZC5pbmRleH0sXG4gICAgJHt0eXBlRGVzY3JpcHRvckxpbmV9LCR7aXNBcnJheUxpbmUgPyBcIlxcbiAgICBcIiArIGlzQXJyYXlMaW5lICsgXCIsXCIgOiBcIlwifVxuICB9YCk7XG4gICAgICBpZiAoIWZpZWxkLmRlcHJlY2F0ZWQpIHtcbiAgICAgICAgZmllbGRzLnB1c2goYFxuICAke2ZpZWxkLm5hbWV9PzogJHtmaWVsZFR5cGVOYW1lfSxgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0c0NvbnRlbnRCdWlsZGVyLmltcG9ydEZyb21NZXNzYWdlRGVzY3JpcHRvcihcIk1lc3NhZ2VEZXNjcmlwdG9yXCIpO1xuICBsZXQgZGVzY3JpcHRvck5hbWUgPSB0b1VwcGVyY2FzZVNuYWtlZChtZXNzYWdlRGVmaW5pdGlvbi5uYW1lKTtcbiAgdHNDb250ZW50QnVpbGRlci5wdXNoKGBcbmV4cG9ydCBpbnRlcmZhY2UgJHttZXNzYWdlRGVmaW5pdGlvbi5uYW1lfSB7JHtmaWVsZHMuam9pbihcIlwiKX1cbn1cblxuZXhwb3J0IGxldCAke2Rlc2NyaXB0b3JOYW1lfTogTWVzc2FnZURlc2NyaXB0b3I8JHttZXNzYWdlRGVmaW5pdGlvbi5uYW1lfT4gPSB7XG4gIG5hbWU6ICcke21lc3NhZ2VEZWZpbml0aW9uLm5hbWV9JyxcbiAgZmllbGRzOiBbJHtmaWVsZERlc2NyaXB0b3JzLmpvaW4oXCIsIFwiKX1dLFxufTtcbmApO1xufVxuIl19