UNPKG

grunt-generate-view-model

Version:
148 lines 6.38 kB
"use strict"; 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; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getMapperImports = void 0; const path = __importStar(require("path")); const import_1 = require("../../../../tasks/model/import"); const enums_1 = require("../../../../tasks/pipes/enums"); const pipes_1 = require("../../../../tasks/pipes"); const classmeta_1 = require("../../../../tasks/pipes/classmeta"); const primitiveTypes = ['string', 'number', 'object', 'any', 'null', 'undefined', 'boolean']; const getTransformerImportsForField = (fieldMetadata) => { const imports = []; const isFieldHasTransformerFunctions = fieldMetadata.fieldConvertFunction && !fieldMetadata.ignoredInView; if (!isFieldHasTransformerFunctions) { return imports; } [enums_1.FuncDirection.toView, enums_1.FuncDirection.fromView].forEach(direction => { const directionInfo = fieldMetadata.fieldConvertFunction[direction]; const isDirectionTypeIsPrimitive = !directionInfo || directionInfo.isPrimitive; if (isDirectionTypeIsPrimitive) { return; } const mainClass = directionInfo.function.split('.')[0]; imports.push(mainClass); }); return imports; }; const getMapperFieldImportForField = (fieldMetadata) => { const imports = []; if (fieldMetadata.needGeneratedMapper) { imports.push(`${fieldMetadata.type}Mapper`); } return imports; }; const getMapperImportsForFields = (fields) => { const imports = []; fields.forEach(field => { imports.push(...getTransformerImportsForField(field)); imports.push(...getMapperFieldImportForField(field)); }); return imports; }; const getContextTypeImports = (meta, possibleImports) => { const createImport = (type) => { if (!type || primitiveTypes.includes(type)) { return null; } const contextImport = new import_1.Import(); contextImport.forMapper = true; contextImport.type = type; const possibleImport = possibleImports.find(i => i.clauses.find(cl => cl === type)); if (!possibleImport) { return; } const toPath = possibleImport.absPathNode.join('/'); const fromPath = meta.mapperPath; const arrayPath = path.relative(fromPath, toPath).split('\\'); const arrayPathLength = arrayPath.length - 1; arrayPath[arrayPathLength] = pipes_1.downFirstLetter(arrayPath[arrayPathLength]); contextImport.path = arrayPath.join('/'); if (contextImport.path.indexOf('./') < 0 && !possibleImport.isNodeModule) { contextImport.path = `./${contextImport.path}`; } return contextImport; }; const { classMetadata } = meta; const imports = []; const fromViewImport = createImport(classMetadata.contextType.fromView.value); if (fromViewImport) { imports.push(fromViewImport); } const toViewImport = createImport(classMetadata.contextType.toView.value); if (toViewImport) { imports.push(toViewImport); } return imports; }; const getMapperImports = (fileMetadata, imports) => { let mapperImports = []; const resultMapperImports = []; mapperImports = getMapperImportsForFields(fileMetadata.classMetadata.fields); mapperImports.forEach(mapperImport => { const importNode = imports.find(nodeImport => { return nodeImport.clauses.includes(mapperImport); }); if (!importNode) { return; } const imp = new import_1.Import(); imp.forMapper = true; imp.type = mapperImport; const toPath = importNode.absPathNode.join('/'); const fromPath = fileMetadata.mapperPath; // fileMetadata.filename.split('.ts').join(''); const arrayPath = path.relative(fromPath, toPath).split('\\'); const arrayPathLength = arrayPath.length - 1; arrayPath[arrayPathLength] = pipes_1.downFirstLetter(arrayPath[arrayPathLength]); imp.path = arrayPath.join('/'); if (imp.path.indexOf('./') < 0 && !importNode.isNodeModule) { imp.path = `./${imp.path}`; } resultMapperImports.push(imp); }); // @@ // // получение импортов для сгенерированных мапперов // const generatedImports = classmeta_1.getDependencyImportsForImports(resultMapperImports, fileMetadata); generatedImports.forEach(generatedImport => { const isMapperImportExistInImports = fileMetadata.imports.find(_import => _import.type.includes(generatedImport.type)); if (isMapperImportExistInImports) { return; } resultMapperImports.push(generatedImport); }); // @@ // // Получение путей для типов контекста в трансформерах // const contextTypeImports = getContextTypeImports(fileMetadata, imports); contextTypeImports.forEach(generatedImport => { const isMapperImportExistInImports = fileMetadata.imports.find(_import => _import.type.includes(generatedImport.type)); if (isMapperImportExistInImports) { return; } resultMapperImports.push(generatedImport); }); return resultMapperImports; }; exports.getMapperImports = getMapperImports; //# sourceMappingURL=index.js.map