Skip to content

Commit 53cfd22

Browse files
authored
Prevent crash on empty Index JSON interfaceLanguage nodes (#922)
If an interfaceLanguage item is empty, the navigator will skip it. Resolves: rdar://143323864
1 parent 1a53a76 commit 53cfd22

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

src/utils/navigatorData.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -194,11 +194,13 @@ function extractRootNode(data) {
194194

195195
/**
196196
* Flatten data for each language variant
197+
* @param {Object} languages
197198
* @return { languageVariant: NavigatorFlatItem[] }
198199
*/
199-
export function flattenNavigationIndex(indexData) {
200-
return Object.entries(indexData).reduce((acc, [language, data]) => {
201-
const topLevelNode = extractRootNode(data);
200+
export function flattenNavigationIndex(languages) {
201+
return Object.entries(languages).reduce((acc, [language, langData]) => {
202+
if (!langData.length) return acc;
203+
const topLevelNode = extractRootNode(langData);
202204
acc[language] = flattenNestedData(
203205
topLevelNode.children || [], null, 0, topLevelNode.beta,
204206
);

tests/unit/utils/navigatorData.spec.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,12 @@ describe('when multiple top-level children are provided', () => {
379379
expect(flattenedIndex.swift.length).toBe(1);
380380
expect(flattenedIndex.swift[0].title).toBe(c.children[0].title);
381381
});
382+
383+
it('skips empty languages', () => {
384+
const flattenedIndex = flattenNavigationIndex({ occ: [], swift: [a] });
385+
expect(flattenedIndex.swift.length).toBe(1);
386+
expect(flattenedIndex.swift[0].title).toBe(a.children[0].title);
387+
});
382388
});
383389

384390
describe('extractTechnologyProps', () => {

0 commit comments

Comments
 (0)