UNPKG

@selfage/generator_cli

Version:

Code generation for message, service, and database.

87 lines (86 loc) 13.8 kB
"use strict"; 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