UNPKG

grunt-generate-view-model

Version:
134 lines 7.08 kB
"use strict"; /* eslint-disable no-console */ /* eslint-disable func-style */ /* eslint-disable no-use-before-define */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createViewModelsInternal = exports.createFiles = exports.createMetadatas = void 0; const fs = __importStar(require("fs")); const path = __importStar(require("path")); const mkdirp_1 = __importDefault(require("mkdirp")); const ts_file_parser_1 = require("ts-file-parser"); const filemetadata_1 = require("./model/filemetadata"); const pipes_1 = require("./pipes"); const nunjuks_1 = require("./service/nunjuks"); const configName = 'genconfig.json'; const UTF8 = 'utf8'; function createMetadatas(filePathes, configOptions) { return __awaiter(this, void 0, void 0, function* () { const generatedFiles = []; const uniqueFilePathes = Array.from(new Set(filePathes)); uniqueFilePathes.map(path => { const stringFile = fs.readFileSync(path, { encoding: 'utf-8' }); try { const fileStructure = ts_file_parser_1.parseStruct(stringFile, {}, path); const fileImports = fileStructure._imports || []; fileStructure.classes.forEach(baseClass => { const { decorators } = baseClass; const generateViewDecorators = decorators.filter(dec => dec.name === pipes_1.Decorators.GenerateView); if (!generateViewDecorators.length) { return; } generateViewDecorators.forEach(dec => { const options = dec.arguments[0].valueOf(); const { filePath, model, mapperPath } = options; const fileMetadata = new filemetadata_1.FileMetadata(); fileMetadata.basePath = path; fileMetadata.filename = `${filePath}/${pipes_1.downFirstLetter(model)}.ts`; fileMetadata.mapperPath = mapperPath; fileMetadata.classMetadata = pipes_1.createClassMeta(baseClass, options, fileImports, path, (configOptions === null || configOptions === void 0 ? void 0 : configOptions.extendLevel) || 2); fileMetadata.imports = pipes_1.makeCorrectImports(fileMetadata, fileImports); if (fileMetadata.mapperPath) { fileMetadata.classMetadata = pipes_1.mapFileClasses(fileMetadata.classMetadata, fileMetadata); } fileMetadata.imports = pipes_1.filterFileMetadata(fileMetadata.imports, fileMetadata.classMetadata); generatedFiles.push(fileMetadata); }); }); } catch (e) { console.log(pipes_1.ConsoleColor.Red, `file ${path} has error: ${e.message}`); console.log(pipes_1.ConsoleColor.Default); } }); const result = generatedFiles.filter(file => file.filename); return result; }); } exports.createMetadatas = createMetadatas; function createFiles(filesMetadata) { return __awaiter(this, void 0, void 0, function* () { filesMetadata.map(_fileMetadata => { const fileMetadata = Object.assign({}, _fileMetadata); if (!fileMetadata.classMetadata.generateView) { return; } const nunjucks = new nunjuks_1.NunjucksService(); const generatedClassFileContent = nunjucks.createViewTemplate(fileMetadata); const createdMapperFileContent = nunjucks.createMapperTemplate(fileMetadata); const generatedFileExist = generatedClassFileContent && generatedClassFileContent.trim(); if (!generatedFileExist) { return; } mkdirp_1.default.sync(path.dirname(fileMetadata.filename)); fs.writeFileSync(fileMetadata.filename, generatedClassFileContent, { encoding: 'utf-8' }); const needMapper = !!fileMetadata.classMetadata.needMapper; if (!needMapper) { return; } pipes_1.createMapperFile(fileMetadata, createdMapperFileContent); }); }); } exports.createFiles = createFiles; const createViewModelsInternal = () => __awaiter(void 0, void 0, void 0, function* () { try { const dateStart = Date.now(); const file = fs.readFileSync(configName, { encoding: UTF8 }); const config = JSON.parse(file); const possibleFilePathes = pipes_1.getAllFiles(config.check.folders); console.log(pipes_1.ConsoleColor.Green, `Generate View: Count of files: ${possibleFilePathes.length}`); const metadata = yield createMetadatas(possibleFilePathes, config.options); yield createFiles(metadata); const dateEnd = Date.now(); console.log(pipes_1.ConsoleColor.Green, `Generate View: Execution time: ${dateEnd - dateStart}ms`); } catch (e) { console.log(pipes_1.ConsoleColor.Red, e.message); } finally { console.log(pipes_1.ConsoleColor.Default); } }); exports.createViewModelsInternal = createViewModelsInternal; //# sourceMappingURL=createViewModels.js.map