grunt-generate-view-model
Version:
Global task for generation view model
106 lines • 5.22 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.saveInfoAboutTransformer = void 0;
const fs = __importStar(require("fs"));
const path = __importStar(require("path"));
const ts_file_parser_1 = require("ts-file-parser");
const enums_1 = require("./enums");
const primitiveTypes_1 = require("../../tasks/constants/primitiveTypes");
const saveInfoAboutTransformer = (direction, func, imports, cm) => {
var _a;
if (!direction) {
return;
}
const isTransformFunctionExist = !!((_a = func[direction]) === null || _a === void 0 ? void 0 : _a.function);
if (!isTransformFunctionExist) {
return;
}
const importFunctionName = func[direction].function;
const moduleImport = imports.find(possibleImport => possibleImport.clauses.indexOf(importFunctionName) > -1);
if (moduleImport) {
let fileContentInString = '';
let pathFromFile = moduleImport.absPathNode.join('/');
const getContentFrom = (from) => {
fileContentInString = fs.readFileSync(path.resolve(pathFromFile + from)).toString();
pathFromFile = `${pathFromFile}${from}`;
};
try {
getContentFrom('.ts');
}
catch (e) {
getContentFrom('/index.ts');
}
const jsonStructure = ts_file_parser_1.parseStruct(fileContentInString, {}, pathFromFile);
const { functions } = jsonStructure;
const targetFuncs = functions.find(func => func.name === importFunctionName);
func[direction].isAsync = targetFuncs.isAsync;
const asyncDirect = enums_1.asyncDirection[direction];
if (!cm[asyncDirect]) {
cm[asyncDirect] = targetFuncs.isAsync;
}
func[direction].isPrimitive = false;
const contextObject = targetFuncs.params[1];
const contextTypeOfTransformer = (contextObject === null || contextObject === void 0 ? void 0 : contextObject.type) || null;
const contextMandatoryOfType = (contextObject === null || contextObject === void 0 ? void 0 : contextObject.mandatory) || false;
const directionValueInfo = cm.contextType[direction];
if (!contextTypeOfTransformer) {
return;
}
if (!directionValueInfo.value || directionValueInfo.value === contextTypeOfTransformer || contextTypeOfTransformer === 'any') {
directionValueInfo.value = contextTypeOfTransformer;
directionValueInfo.mandatory = contextMandatoryOfType || directionValueInfo.mandatory;
const fieldsWithContext = cm.fields.filter(f => { var _a; return !!((_a = f.fieldConvertFunction) === null || _a === void 0 ? void 0 : _a[direction]); });
fieldsWithContext.forEach(f => {
const funcToRecognize = functions.find(func => func.name === f.fieldConvertFunction[direction].function);
const isFuncsWithParams = !!(funcToRecognize === null || funcToRecognize === void 0 ? void 0 : funcToRecognize.params[1]);
if (!isFuncsWithParams) {
return;
}
cm.contextTypeFields[direction].push(f.name);
});
}
else {
throw new Error('Context for one-side mapper should be of one type or any');
}
const isPrimitiveType = !!primitiveTypes_1.primitiveTypes.find(type => type === directionValueInfo.value);
if (isPrimitiveType) {
return;
}
const contextTypeImport = jsonStructure._imports.find(imp => !!imp.clauses.find(clause => directionValueInfo.value === clause));
imports.push({
clauses: [directionValueInfo.value],
absPathNode: contextTypeImport.absPathNode,
absPathString: contextTypeImport.absPathNode.join('/'),
isNodeModule: false
});
return;
}
func[direction].isPrimitive = true;
if (func[direction].function !== 'null' && func[direction].function !== 'undefined') {
func[direction].isPrimitiveString = isNaN(+func[direction].function);
}
else {
func[direction].isPrimitiveString = false;
}
};
exports.saveInfoAboutTransformer = saveInfoAboutTransformer;
//# sourceMappingURL=transformer.js.map