UNPKG

@itrocks/framework

Version:

RAD framework for intuitive web application development, blending data and domain-driven design with modular architecture

61 lines 2.73 kB
"use strict"; 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