nativescript
Version:
Command-line interface for building NativeScript projects
73 lines • 3.81 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.MessageContractGenerator = void 0;
const code_entity_1 = require("../codeGeneration/code-entity");
const code_printer_1 = require("../codeGeneration/code-printer");
const _ = require("lodash");
const yok_1 = require("../yok");
class MessageContractGenerator {
constructor($fs, $messagesService) {
this.$fs = $fs;
this.$messagesService = $messagesService;
}
async generate() {
const interfacesFile = new code_entity_1.Block();
const implementationsFile = new code_entity_1.Block();
implementationsFile.writeLine("//");
implementationsFile.writeLine("// automatically generated code; do not edit manually!");
implementationsFile.writeLine("//");
implementationsFile.writeLine("/* tslint:disable:all */");
implementationsFile.writeLine("");
interfacesFile.writeLine("//");
interfacesFile.writeLine("// automatically generated code; do not edit manually!");
interfacesFile.writeLine("//");
interfacesFile.writeLine("/* tslint:disable:all */");
const messagesClass = new code_entity_1.Block("export class Messages implements IMessages");
const messagesInterface = new code_entity_1.Block("interface IMessages");
_.each(this.$messagesService.pathsToMessageJsonFiles, (jsonFilePath) => {
const jsonContents = this.$fs.readJson(jsonFilePath), implementationBlock = new code_entity_1.Block(), interfaceBlock = new code_entity_1.Block();
this.generateFileRecursive(jsonContents, "", implementationBlock, 0, {
shouldGenerateInterface: false,
});
this.generateFileRecursive(jsonContents, "", interfaceBlock, 0, {
shouldGenerateInterface: true,
});
messagesClass.addBlock(implementationBlock);
messagesInterface.addBlock(interfaceBlock);
});
interfacesFile.addBlock(messagesInterface);
interfacesFile.writeLine("/* tslint:enable */");
interfacesFile.writeLine("");
implementationsFile.addBlock(messagesClass);
implementationsFile.writeLine("$injector.register('messages', Messages);");
implementationsFile.writeLine("/* tslint:enable */");
implementationsFile.writeLine("");
const codePrinter = new code_printer_1.CodePrinter();
return {
interfaceFile: codePrinter.composeBlock(interfacesFile),
implementationFile: codePrinter.composeBlock(implementationsFile),
};
}
generateFileRecursive(jsonContents, propertyValue, block, depth, options) {
_.each(jsonContents, (val, key) => {
let newPropertyValue = propertyValue + key;
const separator = options.shouldGenerateInterface || depth ? ":" : "=";
const endingSymbol = options.shouldGenerateInterface || !depth ? ";" : ",";
if (typeof val === "string") {
const actualValue = options.shouldGenerateInterface
? "string"
: `"${newPropertyValue}"`;
block.writeLine(`${key}${separator} ${actualValue}${endingSymbol}`);
newPropertyValue = propertyValue;
return;
}
const newBlock = new code_entity_1.Block(`${key} ${separator} `);
newBlock.endingCharacter = endingSymbol;
this.generateFileRecursive(val, newPropertyValue + ".", newBlock, depth + 1, options);
block.addBlock(newBlock);
});
}
}
exports.MessageContractGenerator = MessageContractGenerator;
yok_1.injector.register("messageContractGenerator", MessageContractGenerator);
//# sourceMappingURL=message-contract-generator.js.map
;