UNPKG

5.12 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 template_loader_1 = require("./template-loader");
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(__dirname, transformedOptions.template.config.basePath, transformedOptions.template.config.template);
28 var outPath = path.resolve(transformedOptions.outPath);
29 var outDir = path.dirname(outPath);
30 mkdirp.sync(outDir);
31 return [{
32 isDev: transformedOptions.isDev,
33 content: template_loader_1.compileTemplate(codegen, templatePath),
34 path: outPath
35 }];
36 }
37 else if (strategy === 'MULTIPLE_FILES') {
38 if (baseOutPath.indexOf('.') > -1) {
39 throw "Generator '" + transformedOptions.template.language + "' uses multiple-files strategy! Please specify a directory using --out flag!";
40 }
41 var resultsArr_1 = [];
42 var filesExtension_1 = transformedOptions.template.config.filesExtension;
43 var templates_1 = transformedOptions.template.config.templates;
44 var outPath = path.resolve(transformedOptions.outPath);
45 mkdirp.sync(outPath);
46 Object.keys(templates_1).forEach(function (templateName) {
47 var templatePath = path.resolve(__dirname, transformedOptions.template.config.basePath, templates_1[templateName]);
48 if (templateName === 'model') {
49 codegen.models.forEach(function (model) {
50 resultsArr_1.push({
51 isDev: transformedOptions.isDev,
52 content: template_loader_1.compileTemplate(model, templatePath),
53 path: path.resolve(transformedOptions.outPath, model.name + '.model.' + filesExtension_1)
54 });
55 });
56 }
57 if (templateName === 'document') {
58 codegen.documents.forEach(function (document) {
59 resultsArr_1.push({
60 isDev: transformedOptions.isDev,
61 content: template_loader_1.compileTemplate(document, templatePath),
62 path: path.resolve(transformedOptions.outPath, document.name + '.document.' + filesExtension_1)
63 });
64 });
65 }
66 });
67 resultsArr_1 = resultsArr_1.filter(function (item) { return item.content.length > 0; });
68 if (templates_1['index']) {
69 var directoryPath_1 = path.resolve(transformedOptions.outPath);
70 var indexOutPath = path.resolve(directoryPath_1, 'index.' + filesExtension_1);
71 var templatePath = path.resolve(transformedOptions.template.config.basePath, templates_1['index']);
72 resultsArr_1.push({
73 isDev: transformedOptions.isDev,
74 content: template_loader_1.compileTemplate({ files: resultsArr_1.map(function (item) {
75 return {
76 fileName: path.basename(item.path, '.' + filesExtension_1),
77 fullPath: item.path,
78 extension: filesExtension_1,
79 directory: directoryPath_1
80 };
81 }) }, templatePath),
82 path: indexOutPath
83 });
84 }
85 return resultsArr_1;
86 }
87 else {
88 throw "Unknown strategy (" + strategy + ") specified in language template " + transformedOptions.template.language;
89 }
90})
91 .then(function (generationResult) {
92 generationResult.forEach(function (file) {
93 if (file.isDev) {
94 console.log("================== " + file.path + " ==================");
95 console.log(file.content);
96 }
97 else {
98 fs.writeFileSync(file.path, file.content);
99 console.log("Generated file written to " + file.path);
100 }
101 });
102})
103 .catch(cli_1.cliError);
104//# sourceMappingURL=index.js.map
\No newline at end of file