UNPKG

4.94 kBJavaScriptView Raw
1#!/usr/bin/env node
2"use strict";
3var cli_1 = require("./cli");
4var scheme_loader_1 = require("./scheme-loader");
5var codegen_1 = require("./codegen");
6var document_loader_1 = require("./document-loader");
7var generator_1 = require("./generator");
8var fs = require("fs");
9var path = require("path");
10var mkdirp = require("mkdirp");
11var handlebars_helpers_1 = require("./handlebars-helpers");
12var options = cli_1.initCLI(process.argv);
13cli_1.validateCliOptions(options);
14cli_1.transformOptions(options)
15 .then(function (transformedOptions) {
16 handlebars_helpers_1.initHelpers();
17 var schema = scheme_loader_1.loadSchema(transformedOptions.introspection);
18 var documents = transformedOptions.documents;
19 var codegen = codegen_1.prepareCodegen(schema, document_loader_1.loadDocumentsSources(documents), transformedOptions.template.config.primitives);
20 var templateConfig = transformedOptions.template.config;
21 var strategy = templateConfig.strategy || 'SINGLE_FILE';
22 var baseOutPath = path.basename(transformedOptions.outPath);
23 if (strategy === 'SINGLE_FILE') {
24 if (baseOutPath.indexOf('.') === -1) {
25 throw "Generator '" + transformedOptions.template.language + "' uses single-file strategy! Please specify a filename using --out flag!";
26 }
27 var templatePath = path.resolve(transformedOptions.template.config.basePath, transformedOptions.template.config.template);
28 return [{
29 isDev: transformedOptions.isDev,
30 content: generator_1.generateCode(codegen, templatePath),
31 path: path.resolve(transformedOptions.outPath)
32 }];
33 }
34 else if (strategy === 'MULTIPLE_FILES') {
35 if (baseOutPath.indexOf('.') > -1) {
36 throw "Generator '" + transformedOptions.template.language + "' uses multiple-files strategy! Please specify a directory using --out flag!";
37 }
38 var resultsArr_1 = [];
39 var filesExtension_1 = transformedOptions.template.config.filesExtension;
40 var templates_1 = transformedOptions.template.config.templates;
41 var outPath = path.resolve(transformedOptions.outPath);
42 mkdirp.sync(outPath);
43 Object.keys(templates_1).forEach(function (templateName) {
44 var templatePath = path.resolve(transformedOptions.template.config.basePath, templates_1[templateName]);
45 if (templateName === 'model') {
46 codegen.models.forEach(function (model) {
47 resultsArr_1.push({
48 isDev: transformedOptions.isDev,
49 content: generator_1.generateCode(model, templatePath),
50 path: path.resolve(transformedOptions.outPath, model.name + '.model.' + filesExtension_1)
51 });
52 });
53 }
54 if (templateName === 'document') {
55 codegen.documents.forEach(function (document) {
56 resultsArr_1.push({
57 isDev: transformedOptions.isDev,
58 content: generator_1.generateCode(document, templatePath),
59 path: path.resolve(transformedOptions.outPath, document.name + '.document.' + filesExtension_1)
60 });
61 });
62 }
63 });
64 resultsArr_1 = resultsArr_1.filter(function (item) { return item.content.length > 0; });
65 if (templates_1['index']) {
66 var directoryPath_1 = path.resolve(transformedOptions.outPath);
67 var indexOutPath = path.resolve(directoryPath_1, 'index.' + filesExtension_1);
68 var templatePath = path.resolve(transformedOptions.template.config.basePath, templates_1['index']);
69 resultsArr_1.push({
70 isDev: transformedOptions.isDev,
71 content: generator_1.generateCode({ files: resultsArr_1.map(function (item) {
72 return {
73 fileName: path.basename(item.path, '.' + filesExtension_1),
74 fullPath: item.path,
75 extension: filesExtension_1,
76 directory: directoryPath_1
77 };
78 }) }, templatePath),
79 path: indexOutPath
80 });
81 }
82 return resultsArr_1;
83 }
84 else {
85 throw "Unknown strategy (" + strategy + ") specified in language template " + transformedOptions.template.language;
86 }
87})
88 .then(function (generationResult) {
89 generationResult.forEach(function (file) {
90 if (file.isDev) {
91 console.log("================== " + file.path + " ==================");
92 console.log(file.content);
93 }
94 else {
95 fs.writeFileSync(file.path, file.content);
96 console.log("Generated file written to " + file.path);
97 }
98 });
99})
100 .catch(cli_1.cliError);
101//# sourceMappingURL=index.js.map
\No newline at end of file