MCPcopy
hub / github.com/chartdb/chartdb / cloneDiagram

Function cloneDiagram

src/lib/clone.ts:133–279  ·  view source on GitHub ↗
(
    diagram: Diagram,
    options: {
        generateId: () => string;
    } = {
        generateId: defaultGenerateId,
    }
)

Source from the content-addressed store, hash-verified

131};
132
133export 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 ) ?? [];

Callers 4

cloneDiagramWithIdsFunction · 0.90
DiagramRowActionsMenuFunction · 0.90

Calls 4

generateIdFunction · 0.90
cloneTableFunction · 0.85
getNewIdFunction · 0.85

Tested by

no test coverage detected