UNPKG

ph-dev-tools

Version:
94 lines (92 loc) 4.33 kB
"use strict"; /** * Created by Papa on 4/26/2016. */ const QBuilder_1 = require("./../QBuilder"); const QEntityBuilder_1 = require("./QEntityBuilder"); const pathResolver_1 = require("../../resolve/pathResolver"); const IQEntityBuilder_1 = require("./IQEntityBuilder"); class QEntityFileBuilder { constructor(entity, fullGenerationPath, workingDirPath) { this.entity = entity; this.fullGenerationPath = fullGenerationPath; this.workingDirPath = workingDirPath; this.importStatements = []; this.qEntityBuilder = new QEntityBuilder_1.QEntityBuilder(entity, fullGenerationPath, workingDirPath, this); this.iqEntityBuilder = new IQEntityBuilder_1.IQEntityBuilder(entity, this.qEntityBuilder); this.addImport(`IEntity, IQEntity, IEntityQuery, QEntity, FieldType, IQBooleanField, QBooleanField, IQDateField, QDateField, IQNumberField, QNumberField, IQStringField, QStringField, IBooleanOperation,JSONBooleanOperation, IDateOperation,JSONDateOperation, INumberOperation,JSONNumberOperation, IStringOperation,JSONStringOperation, RelationType, IQRelation, QRelation`, 'querydsl-typescript'); let entityRelativePath = pathResolver_1.resolveRelativePath(fullGenerationPath, entity.path); this.addImport(entity.type, entityRelativePath); this.addImport('PH, ProxyGenerator', 'phibernate'); } build() { let imports = this.buildImports(); let proxySetup = this.buildProxySetup(); let interfaceSource = this.iqEntityBuilder.build(); let classSource = this.qEntityBuilder.build(); let entityName = this.entity.docEntry.name; let fileSource = `${imports} // Entity Proxy setup ${proxySetup} ${interfaceSource} export interface I${entityName}Query extends IEntityQuery<I${entityName}> { } ${classSource} PH.addQEntity(${entityName}, Q${entityName}.q); `; return fileSource; } buildProxySetup() { let proxySetup = ''; let clazz = this.entity.docEntry.name; this.qEntityBuilder.propertyBuilders.forEach((propertyBuilder // ) => { let docEntry = propertyBuilder.propertyDocEntry; let fieldType = QBuilder_1.getPropertyFieldType(docEntry); let propertyName = docEntry.name; proxySetup += `ProxyGenerator.setupEntityField(${clazz}, '${propertyName}', FieldType.${fieldType});\n`; }); this.qEntityBuilder.relationBuilders.forEach((relationBuilder // ) => { let docEntry = relationBuilder.entityProperty; let fieldType = QBuilder_1.getRelationFieldType(docEntry); let propertyName = docEntry.name; proxySetup += `ProxyGenerator.setupEntityRelation(${clazz}, '${propertyName}', RelationType.${fieldType}, ${docEntry.entity.type});\n`; }); return proxySetup; } buildImports() { let imports = ``; this.importStatements.forEach((importStatement) => { imports += '\n' + importStatement; }); this.qEntityBuilder.relationBuilders.forEach((builder) => { if (this.entity !== builder.entityProperty.entity) { let entityRelativePath = pathResolver_1.resolveRelativePath(this.fullGenerationPath, builder.entityProperty.entity.path); let type = builder.entityProperty.entity.type; let typeImportStatement = `import {${type}} from '${entityRelativePath}';`; imports += '\n' + typeImportStatement; let qEntityRelativePath = pathResolver_1.resolveRelativeEntityPath(this.entity, builder.entityProperty.entity); let qType = 'Q' + builder.entityProperty.entity.type; let qTypeImportStatement = `import {I${type}, I${qType}, ${qType}} from '${qEntityRelativePath}';`; imports += '\n' + qTypeImportStatement; } }); return imports; } addImport(classString, fileName = `./${classString}`) { let importStatement = `import {${classString}} from '${fileName}';`; this.importStatements.push(importStatement); } } exports.QEntityFileBuilder = QEntityFileBuilder; //# sourceMappingURL=QEntityFileBuilder.js.map