hades-cli
Version:
Hades CLI developer tool
347 lines (346 loc) • 23 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Properties = void 0;
const types_1 = require("./../types");
class Properties {
constructor(properties = []) {
this.properties = properties;
this.timestampFields = ['created_at', 'updated_at', 'deleted_at'];
this.deletedAtField = ['deleted_at'];
}
*[Symbol.iterator]() {
for (const property of this.properties)
yield property;
}
get length() {
return this.properties.length;
}
get withoutTimestamps() {
return this.properties.filter(property => !this.timestampFields.includes(property.name));
}
get withoutDeletedAt() {
return this.properties.filter(property => !this.deletedAtField.includes(property.name));
}
get withRelationship() {
return this.properties.filter(property => property.relationship);
}
get withRelationshipOneToOne() {
return this.properties.filter(property => property.relationship === types_1.SqlRelationship.ONE_TO_ONE);
}
get withRelationshipOneToOneWithRelationshipField() {
return this.withRelationshipOneToOne.filter(property => !!property.relationshipField);
}
get withRelationshipOneToOneWithoutRelationshipField() {
return this.withRelationshipOneToOne.filter(property => !property.relationshipField);
}
get withRelationshipManyToOne() {
return this.properties.filter(property => property.relationship === types_1.SqlRelationship.MANY_TO_ONE);
}
get withRelationshipOneToMany() {
return this.properties.filter(property => property.relationship === types_1.SqlRelationship.ONE_TO_MANY);
}
get withRelationshipManyToMany() {
return this.properties.filter(property => property.relationship === types_1.SqlRelationship.MANY_TO_MANY);
}
get withRelationshipIntermediateTable() {
return this.properties.filter(property => !!property.intermediateTable);
}
get withRelationshipType() {
return this.properties.filter(property => property.type === types_1.SqlType.RELATIONSHIP);
}
get withTimezone() {
return this.properties.filter(property => property.hasTimezone);
}
get id() {
return this.properties.find(property => property.type === types_1.SqlType.ID);
}
// data for component
// aggregate
get aggregate() {
return this.properties
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
// commands
get createCommand() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
get updateCommand() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
// commands handler
get createCommandHandler() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
get updateCommandHandler() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
// queries handler
get findQueryHandler() {
return this.properties
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY); // exclude one to many relations
}
get findByIdQueryHandler() {
return this.properties
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY); // exclude one to many relations
}
get getQueryHandler() {
return this.properties
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY); // exclude one to many relations
}
// services
get createService() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
get updateService() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
// events
get createdEvent() {
return this.properties
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
get updatedEvent() {
return this.properties
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
get deletedEvent() {
return this.properties
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
// controllers
get createController() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
get updateController() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
// resolvers
get createResolver() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
get updateResolver() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
// graphql
get graphqlType() {
return this.properties; // exclude one to many relations
}
get graphqlInput() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY); // exclude one to many relations
//.filter(property => !(property.relationship === SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to many relations
}
// DTOs
get dto() {
return this.properties
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField to avoid circular dependency
}
get createDto() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to many relations
}
get updateDto() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to many relations
}
// models
get modelColumns() {
return this.properties; // exclude one to many relations
}
get schemaRelations() {
return this.properties.filter(property => property.relationship); // only relationship
}
// postman
get postmanGraphQLCreateQuery() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => property.relationship !== types_1.SqlRelationship.MANY_TO_ONE) // exclude one to many relations
.filter(property => property.relationship !== types_1.SqlRelationship.MANY_TO_MANY) // exclude many to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
get postmanGraphQLGetQuery() {
return this.properties
.filter(property => !this.deletedAtField.includes(property.name)) // exclude deleteAt
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => property.relationship !== types_1.SqlRelationship.MANY_TO_ONE) // exclude one to many relations
.filter(property => property.relationship !== types_1.SqlRelationship.MANY_TO_MANY) // exclude many to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
get postmanGraphQLFindQuery() {
return this.properties
.filter(property => !this.deletedAtField.includes(property.name)) // exclude deleteAt
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => property.relationship !== types_1.SqlRelationship.MANY_TO_ONE) // exclude one to many relations
.filter(property => property.relationship !== types_1.SqlRelationship.MANY_TO_MANY) // exclude many to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
get postmanGraphQLFindByIdQuery() {
return this.properties
.filter(property => !this.deletedAtField.includes(property.name)) // exclude deleteAt
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => property.relationship !== types_1.SqlRelationship.MANY_TO_ONE) // exclude one to many relations
.filter(property => property.relationship !== types_1.SqlRelationship.MANY_TO_MANY) // exclude many to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
get postmanGraphQLUpdateQuery() {
return this.properties
.filter(property => !this.deletedAtField.includes(property.name)) // exclude deleteAt
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => property.relationship !== types_1.SqlRelationship.MANY_TO_ONE) // exclude one to many relations
.filter(property => property.relationship !== types_1.SqlRelationship.MANY_TO_MANY) // exclude many to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
get postmanGraphQLCreateVariables() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
get postmanGraphQLUpdateVariables() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
get postmanGraphQLDeleteQuery() {
return this.properties
.filter(property => !this.deletedAtField.includes(property.name)) // exclude deleteAt
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => property.relationship !== types_1.SqlRelationship.MANY_TO_ONE) // exclude one to many relations
.filter(property => property.relationship !== types_1.SqlRelationship.MANY_TO_MANY) // exclude many to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
get postmanRestCreate() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to many relations
}
get postmanRestUpdate() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to many relations
}
// data for testing
get test() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to many relations
}
get isNotNullable() {
return this.properties.filter(property => property.nullable === false);
}
get hasLength() {
return this.properties.filter(property => !!property.length);
}
get hasMaxLength() {
return this.properties.filter(property => !!property.maxLength);
}
get hasMinLength() {
return this.properties.filter(property => !!property.minLength);
}
get isInteger() {
return this.properties.filter(property => property.type === types_1.SqlType.INT);
}
get isIntegerUnsigned() {
return this.properties.filter(property => property.type === types_1.SqlType['INT.UNSIGNED']);
}
get isBoolean() {
return this.properties.filter(property => property.type === types_1.SqlType.BOOLEAN);
}
get isEnum() {
return this.properties.filter(property => property.type === types_1.SqlType.ENUM);
}
get isTimestamp() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.type === types_1.SqlType.TIMESTAMP);
}
// others
get valueObjects() {
return this.properties
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to many relations
}
get response() {
return this.properties
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to many relations
}
get seed() {
return this.properties
.filter(property => !this.timestampFields.includes(property.name)) // exclude timestamps
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
get mapper() {
return this.properties
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
get mock() {
return this.properties
.filter(property => property.relationship !== types_1.SqlRelationship.ONE_TO_MANY) // exclude one to many relations
.filter(property => !(property.relationship === types_1.SqlRelationship.ONE_TO_ONE && !property.relationshipField)); // exclude one to one relations without relationshipField, is relation one to one without xxxx_id
}
getForeignRelationship(boundedContextName) {
return this.withRelationship.filter(item => {
if (!item.relationshipModulePath)
return false;
return item.relationshipModulePath.split('/')[0] !== boundedContextName;
});
}
add(property) {
this.properties.push(property);
}
filter(fn) {
return this.properties.filter(fn);
}
toDto() {
return this.properties.map(property => property.toDto());
}
}
exports.Properties = Properties;