{"version":3,"file":"ContentSchemaTransferMappingFactory.cjs","sources":["../../../../../packages/engine-http/src/transfer/ContentSchemaTransferMappingFactory.ts"],"sourcesContent":["import { Model, Schema } from '@contember/schema'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { DbColumnSchema, DbColumnSchemaMap, TransferMapping, TransferTableMapping } from './TransferMapping'\n\nexport class ContentSchemaTransferMappingFactory {\n\tcreateContentSchemaMapping(contentSchema: Schema, options: {\n\t\texcludeTables?: readonly string[]\n\t} = {}): TransferMapping {\n\t\tconst tables: Record<string, TransferTableMapping> = {}\n\n\t\tfor (const entity of Object.values(contentSchema.model.entities)) {\n\t\t\tif (entity.view === undefined && !options.excludeTables?.includes(entity.tableName)) {\n\t\t\t\ttables[entity.tableName] = {\n\t\t\t\t\tname: entity.tableName,\n\t\t\t\t\tcolumns: this.buildDbColumnSchemaMap(contentSchema.model, entity),\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const entity of Object.values(contentSchema.model.entities)) {\n\t\t\tfor (const joiningTable of this.collectManyHasManyOwned(contentSchema.model, entity)) {\n\t\t\t\tif (!options.excludeTables?.includes(joiningTable.name)) {\n\t\t\t\t\ttables[joiningTable.name] = joiningTable\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { tables }\n\t}\n\n\tprivate buildDbColumnSchemaMap(schema: Model.Schema, entity: Model.Entity): DbColumnSchemaMap {\n\t\tconst columns: DbColumnSchemaMap = {}\n\n\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\tconst column = acceptFieldVisitor<DbColumnSchema | null>(schema, entity, field, {\n\t\t\t\tvisitColumn: ({ column }) => {\n\t\t\t\t\tif (column.type === Model.ColumnType.Enum) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tname: column.columnName,\n\t\t\t\t\t\t\ttype: column.type,\n\t\t\t\t\t\t\tnullable: column.nullable,\n\t\t\t\t\t\t\tvalues: schema.enums[column.columnType],\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if (column.type === Model.ColumnType.Int) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tname: column.columnName,\n\t\t\t\t\t\t\ttype: column.type,\n\t\t\t\t\t\t\tnullable: column.nullable,\n\t\t\t\t\t\t\tsequence: column.sequence !== undefined,\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tname: column.columnName,\n\t\t\t\t\t\t\ttype: column.type,\n\t\t\t\t\t\t\tnullable: column.nullable,\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneOwning: ({ relation, targetEntity }) => ({\n\t\t\t\t\tname: relation.joiningColumn.columnName,\n\t\t\t\t\ttype: targetEntity.fields[targetEntity.primary].type as (Model.ColumnType.Uuid | Model.ColumnType.Int),\n\t\t\t\t\tnullable: relation.nullable,\n\t\t\t\t}),\n\t\t\t\tvisitManyHasOne: ({ relation, targetEntity }) => ({\n\t\t\t\t\tname: relation.joiningColumn.columnName,\n\t\t\t\t\ttype: targetEntity.fields[targetEntity.primary].type as (Model.ColumnType.Uuid | Model.ColumnType.Int),\n\t\t\t\t\tnullable: relation.nullable,\n\t\t\t\t}),\n\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t})\n\n\t\t\tif (column !== null) {\n\t\t\t\tcolumns[column.name] = column\n\t\t\t}\n\t\t}\n\n\t\treturn columns\n\t}\n\n\tprivate collectManyHasManyOwned(schema: Model.Schema, entity: Model.Entity): TransferTableMapping[] {\n\t\tconst joiningTables = []\n\n\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\tconst joiningTable = acceptFieldVisitor<TransferTableMapping | null>(schema, entity, field, {\n\t\t\t\tvisitColumn: () => null,\n\t\t\t\tvisitOneHasOneOwning: () => null,\n\t\t\t\tvisitManyHasOne: () => null,\n\t\t\t\tvisitManyHasManyOwning: ({ entity, relation, targetEntity }) => ({\n\t\t\t\t\tname: relation.joiningTable.tableName,\n\t\t\t\t\tcolumns: {\n\t\t\t\t\t\t[relation.joiningTable.joiningColumn.columnName]: {\n\t\t\t\t\t\t\tname: relation.joiningTable.joiningColumn.columnName,\n\t\t\t\t\t\t\ttype: entity.fields[entity.primary].type as (Model.ColumnType.Uuid | Model.ColumnType.Int),\n\t\t\t\t\t\t\tnullable: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t[relation.joiningTable.inverseJoiningColumn.columnName]: {\n\t\t\t\t\t\t\tname: relation.joiningTable.inverseJoiningColumn.columnName,\n\t\t\t\t\t\t\ttype: targetEntity.fields[targetEntity.primary].type as (Model.ColumnType.Uuid | Model.ColumnType.Int),\n\t\t\t\t\t\t\tnullable: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t})\n\n\t\t\tif (joiningTable !== null) {\n\t\t\t\tjoiningTables.push(joiningTable)\n\t\t\t}\n\t\t}\n\n\t\treturn joiningTables\n\t}\n}\n"],"names":["schema","acceptFieldVisitor","column","Model","entity"],"mappings":"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"}