| 1164 | } |
| 1165 | |
| 1166 | function generateExtensionsData(canvasManifestData) { |
| 1167 | if (!canvasManifestData || !Array.isArray(canvasManifestData.items)) { |
| 1168 | return { items: [], filters: { keywords: [] } }; |
| 1169 | } |
| 1170 | |
| 1171 | const items = canvasManifestData.items.map((item) => ({ |
| 1172 | ...item, |
| 1173 | keywords: Array.isArray(item.keywords) ? item.keywords : [], |
| 1174 | screenshots: item.screenshots || { icon: null, gallery: null }, |
| 1175 | })); |
| 1176 | const filters = { |
| 1177 | keywords: [...new Set(items.flatMap((item) => item.keywords))] |
| 1178 | .filter(Boolean) |
| 1179 | .sort((a, b) => a.localeCompare(b)), |
| 1180 | }; |
| 1181 | |
| 1182 | return { items, filters }; |
| 1183 | } |
| 1184 | |
| 1185 | function writePerExtensionCanvasManifests(canvasManifestData) { |
| 1186 | const manifests = new Map(); |