UNPKG

grunt-generate-view-model

Version:
110 lines 4.8 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.getInterfaceImports = exports.getDecoratorImports = void 0; const path = __importStar(require("path")); const ignoreDecorators_1 = require("../../../../tasks/constants/ignoreDecorators"); const import_1 = require("../../../../tasks/model/import"); const getSearchingImportsName = ({ classMetadata, imports }) => { const importsToSearch = []; classMetadata.fields.forEach(fld => { const isFieldIsPrimitive = !fld.isComplexType && !fld.isEnum; const isImportInclude = importsToSearch.includes(fld.type); const isGlobalImportInclude = imports.find(i => i.type === fld.type); if (isFieldIsPrimitive || isImportInclude || isGlobalImportInclude) { return; } if (fld.ignoredInView) { return; } importsToSearch.push(fld.type); }); return importsToSearch; }; const getDecoratorImports = (fileMetadata, imports) => { const result = []; let decorators = []; const cls = fileMetadata.classMetadata; decorators.push(...cls.decorators.map(d => d.name)); cls.fields.forEach(fld => { const filteredDecorators = fld.decorators.filter(dec => !ignoreDecorators_1.ignoreDecorators.includes(dec.name)); decorators.push(...filteredDecorators.map(d => d.name)); }); decorators = Array.from(new Set(decorators)); imports.forEach(imprt => { const needImport = decorators.find(dec => imprt.clauses.find(c => c.includes(dec))); if (!needImport) { return; } const nodeImport = new import_1.Import(); nodeImport.path = imprt.absPathNode.join('/'); nodeImport.forMapper = false; nodeImport.type = imprt.clauses.filter(clause => decorators.includes(clause)).join(','); result.push(nodeImport); }); return result; }; exports.getDecoratorImports = getDecoratorImports; const getInterfaceImports = (fileMetadata, imports) => { const importsToSearch = getSearchingImportsName(fileMetadata); const fromPath = fileMetadata.filename.split('.ts').join(''); let result = importsToSearch.map(searchImport => { const importToReturn = new import_1.Import(); importToReturn.type = searchImport; const importNode = imports.find(imp => imp.clauses.find(cl => cl === searchImport)); if (!importNode) { return; } if (importNode.isNodeModule) { importToReturn.path = importNode.absPathNode.join('/'); } else { const toPath = importNode.absPathNode.join('/'); const from = path.dirname(fromPath); const _path = path.relative(from, toPath).split('\\').join('/'); importToReturn.path = _path.indexOf('./') < 0 ? `./${_path}` : _path; } return importToReturn; }).filter(r => !!r); // find same class as import in view model const { classMetadata } = fileMetadata; const modelName = classMetadata.baseName; const fieldWithTypeLikeBaseName = classMetadata.fields.find(fld => fld.type === modelName); if (fieldWithTypeLikeBaseName) { const sameImport = new import_1.Import(); sameImport.type = modelName; const to = classMetadata.baseNamePath.replace('.ts', ''); const from = fileMetadata.filename.replace('.ts', '') .split('/') .map((p, i, self) => { if (i === self.length - 1) { return null; } return p; }) .filter(o => o).join('/'); sameImport.path = path.relative(from, to).replace(/\\/g, '/'); result.push(sameImport); } return result; }; exports.getInterfaceImports = getInterfaceImports; //# sourceMappingURL=index.js.map