(
diagram: Diagram,
options: {
generateId: () => string;
} = {
generateId: defaultGenerateId,
}
)
| 131 | }; |
| 132 | |
| 133 | export const cloneDiagram = ( |
| 134 | diagram: Diagram, |
| 135 | options: { |
| 136 | generateId: () => string; |
| 137 | } = { |
| 138 | generateId: defaultGenerateId, |
| 139 | } |
| 140 | ): { diagram: Diagram; idsMap: Map<string, string> } => { |
| 141 | const { generateId } = options; |
| 142 | const diagramId = generateId(); |
| 143 | |
| 144 | const idsMap = generateIdsMapFromDiagram(diagram, generateId); |
| 145 | |
| 146 | const getNewId = (id: string): string | null => { |
| 147 | const newId = idsMap.get(id); |
| 148 | if (!newId) { |
| 149 | return null; |
| 150 | } |
| 151 | return newId; |
| 152 | }; |
| 153 | |
| 154 | const tables: DBTable[] = |
| 155 | diagram.tables?.map((table) => |
| 156 | cloneTable(table, { generateId, idsMap }) |
| 157 | ) ?? []; |
| 158 | |
| 159 | const relationships: DBRelationship[] = |
| 160 | diagram.relationships |
| 161 | ?.map((relationship): DBRelationship | null => { |
| 162 | const id = getNewId(relationship.id); |
| 163 | const sourceTableId = getNewId(relationship.sourceTableId); |
| 164 | const targetTableId = getNewId(relationship.targetTableId); |
| 165 | const sourceFieldId = getNewId(relationship.sourceFieldId); |
| 166 | const targetFieldId = getNewId(relationship.targetFieldId); |
| 167 | |
| 168 | if ( |
| 169 | !id || |
| 170 | !sourceTableId || |
| 171 | !targetTableId || |
| 172 | !sourceFieldId || |
| 173 | !targetFieldId |
| 174 | ) { |
| 175 | return null; |
| 176 | } |
| 177 | |
| 178 | return { |
| 179 | ...relationship, |
| 180 | id, |
| 181 | sourceTableId, |
| 182 | targetTableId, |
| 183 | sourceFieldId, |
| 184 | targetFieldId, |
| 185 | }; |
| 186 | }) |
| 187 | .filter( |
| 188 | (relationship): relationship is DBRelationship => |
| 189 | relationship !== null |
| 190 | ) ?? []; |
no test coverage detected