| 265 | * @param extensionPointNames - Names of the extension point |
| 266 | */ |
| 267 | export function extensionFor( |
| 268 | ...extensionPointNames: string[] |
| 269 | ): BindingTemplate { |
| 270 | return binding => { |
| 271 | if (extensionPointNames.length === 0) return; |
| 272 | let extensionPoints = binding.tagMap[CoreTags.EXTENSION_FOR]; |
| 273 | // Normalize extensionPoints to string[] |
| 274 | if (extensionPoints == null) { |
| 275 | extensionPoints = []; |
| 276 | } else if (typeof extensionPoints === 'string') { |
| 277 | extensionPoints = [extensionPoints]; |
| 278 | } |
| 279 | |
| 280 | // Add extension points |
| 281 | for (const extensionPointName of extensionPointNames) { |
| 282 | if (!extensionPoints.includes(extensionPointName)) { |
| 283 | extensionPoints.push(extensionPointName); |
| 284 | } |
| 285 | } |
| 286 | if (extensionPoints.length === 1) { |
| 287 | // Keep the value as string for backward compatibility |
| 288 | extensionPoints = extensionPoints[0]; |
| 289 | } |
| 290 | binding.tag({[CoreTags.EXTENSION_FOR]: extensionPoints}); |
| 291 | }; |
| 292 | } |
| 293 | |
| 294 | /** |
| 295 | * Register an extension for the given extension point to the context |