Skip to content

Commit 9202cf1

Browse files
committed
pointed out by Devin: port processed correction from Obsidian back to roam. Also destructure
1 parent a6f2d9e commit 9202cf1

2 files changed

Lines changed: 49 additions & 15 deletions

File tree

apps/obsidian/src/utils/conceptConversion.ts

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -277,12 +277,17 @@ export const relatedConcepts = (concept: LocalConceptDataInput): string[] => {
277277
* schema_represented_by_local_id or local_reference_content — so that id
278278
* must equal some concept's source_local_id or it is reported as "missing".
279279
*/
280-
const orderConceptsRec = (
281-
ordered: LocalConceptDataInput[],
282-
concept: LocalConceptDataInput,
283-
remainder: { [key: string]: LocalConceptDataInput },
284-
processed: Set<string>,
285-
): Set<string> => {
280+
const orderConceptsRec = ({
281+
ordered,
282+
concept,
283+
remainder,
284+
processed,
285+
}: {
286+
ordered: LocalConceptDataInput[];
287+
concept: LocalConceptDataInput;
288+
remainder: { [key: string]: LocalConceptDataInput };
289+
processed: Set<string>;
290+
}): Set<string> => {
286291
const relatedConceptIds = relatedConcepts(concept);
287292
let missing: Set<string> = new Set();
288293
while (relatedConceptIds.length > 0) {
@@ -294,7 +299,12 @@ const orderConceptsRec = (
294299
} else {
295300
missing = new Set([
296301
...missing,
297-
...orderConceptsRec(ordered, relatedConcept, remainder, processed),
302+
...orderConceptsRec({
303+
ordered,
304+
concept: relatedConcept,
305+
remainder,
306+
processed,
307+
}),
298308
]);
299309
delete remainder[relatedConceptId];
300310
}
@@ -330,7 +340,12 @@ export const orderConceptsByDependency = (
330340
if (!first) break;
331341
missing = new Set([
332342
...missing,
333-
...orderConceptsRec(ordered, first, conceptById, processed),
343+
...orderConceptsRec({
344+
ordered,
345+
concept: first,
346+
remainder: conceptById,
347+
processed,
348+
}),
334349
]);
335350
if (missing.size > 0) console.error(`missing: ${[...missing].join(", ")}`);
336351
}

apps/roam/src/utils/conceptConversion.ts

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -226,27 +226,40 @@ export const relatedConcepts = (concept: LocalConceptDataInput): string[] => {
226226
return [...new Set(relations)];
227227
};
228228

229-
const orderConceptsRec = (
230-
ordered: LocalConceptDataInput[],
231-
concept: LocalConceptDataInput,
232-
remainder: { [key: string]: LocalConceptDataInput },
233-
): Set<string> => {
229+
const orderConceptsRec = ({
230+
ordered,
231+
concept,
232+
remainder,
233+
processed,
234+
}: {
235+
ordered: LocalConceptDataInput[];
236+
concept: LocalConceptDataInput;
237+
remainder: { [key: string]: LocalConceptDataInput };
238+
processed: Set<string>;
239+
}): Set<string> => {
234240
const relatedConceptIds = relatedConcepts(concept);
235241
let missing: Set<string> = new Set();
236242
while (relatedConceptIds.length > 0) {
237243
const relatedConceptId = relatedConceptIds.shift()!;
244+
if (processed.has(relatedConceptId)) continue;
238245
const relatedConcept = remainder[relatedConceptId];
239246
if (relatedConcept === undefined) {
240247
missing.add(relatedConceptId);
241248
} else {
242249
missing = new Set([
243250
...missing,
244-
...orderConceptsRec(ordered, relatedConcept, remainder),
251+
...orderConceptsRec({
252+
ordered,
253+
concept: relatedConcept,
254+
remainder,
255+
processed,
256+
}),
245257
]);
246258
delete remainder[relatedConceptId];
247259
}
248260
}
249261
ordered.push(concept);
262+
processed.add(concept.source_local_id!);
250263
delete remainder[concept.source_local_id!];
251264
return missing;
252265
};
@@ -273,11 +286,17 @@ export const orderConceptsByDependency = (
273286
) as { [key: string]: LocalConceptDataInput };
274287
const ordered: LocalConceptDataInput[] = [];
275288
let missing: Set<string> = new Set();
289+
const processed: Set<string> = new Set();
276290
while (Object.keys(conceptById).length > 0) {
277291
const first = Object.values(conceptById)[0];
278292
missing = new Set([
279293
...missing,
280-
...orderConceptsRec(ordered, first, conceptById),
294+
...orderConceptsRec({
295+
ordered,
296+
concept: first,
297+
remainder: conceptById,
298+
processed,
299+
}),
281300
]);
282301
}
283302
return { ordered, missing: [...missing] };

0 commit comments

Comments
 (0)