grunt-generate-view-model
Version:
Global task for generation view model
110 lines • 4.8 kB
JavaScript
;
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