@itrocks/framework
Version:
RAD framework for intuitive web application development, blending data and domain-driven design with modular architecture
61 lines • 2.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.columnDefinitionOf = columnDefinitionOf;
exports.columnDefinitionsOf = columnDefinitionsOf;
exports.columnOf = columnOf;
exports.isCollection = isCollection;
exports.isScalar = isScalar;
exports.rightColumnDefinitionOf = rightColumnDefinitionOf;
exports.tableDefinitionOf = tableDefinitionOf;
exports.tableOf = tableOf;
const class_type_1 = require("@itrocks/class-type");
const class_type_2 = require("@itrocks/class-type");
const composition_1 = require("@itrocks/composition");
const property_type_1 = require("@itrocks/property-type");
const rename_1 = require("@itrocks/rename");
const store_1 = require("@itrocks/store");
const reflect_class_1 = require("./reflect-class");
function columnDefinitionOf(tableDefinition, column) {
return columnDefinitionsOf(tableDefinition)[column];
}
function columnDefinitionsOf(tableDefinition) {
return new reflect_class_1.ReflectClass(tableDefinition).property;
}
function columnOf(columnDefinition) {
const tableDefinition = tableDefinitionOf(columnDefinition);
const property = tableDefinition && (0, store_1.storeOf)(tableDefinition)
? columnDefinition.name.toString() + 'Id'
: columnDefinition.name;
return (0, rename_1.toColumn)(property);
}
function isCollection(columnDefinition) {
return columnDefinition.type instanceof property_type_1.CollectionType;
}
function isScalar(columnDefinition) {
return tableDefinitionOf(columnDefinition) === undefined;
}
function rightColumnDefinitionOf(columnDefinition) {
const leftTableDefinition = columnDefinition.class.type;
const rightTableDefinition = tableDefinitionOf(columnDefinition);
if (!rightTableDefinition)
return;
for (const candidate of new reflect_class_1.ReflectClass(rightTableDefinition).properties) {
if (!(0, composition_1.compositeOf)(rightTableDefinition, candidate.name))
continue;
const candidateTableDefinition = tableDefinitionOf(candidate);
if (candidateTableDefinition && (0, class_type_1.inherits)(leftTableDefinition, candidateTableDefinition))
return candidate;
}
}
function tableDefinitionOf(columnDefinition) {
const propertyType = columnDefinition.type;
const type = (propertyType instanceof property_type_1.CollectionType) ? propertyType.elementType.lead : propertyType.lead;
return (0, class_type_2.isAnyType)(type) ? type : undefined;
}
function tableOf(tableDefinition) {
const table = (0, store_1.storeOf)(tableDefinition);
if (!table)
throw new Error(`Type ${tableDefinition.name} is not stored`);
return table;
}
//# sourceMappingURL=sql-join-dependencies.js.map