| 474 | } | 474 | } |
| 475 | | 475 | |
| 476 | /** | 476 | /** |
| | 477 | * Returns a deep clone of the manifest for the given extension name. |
| | 478 | * Accepts either the short name (e.g. `SillyTavern-MyExtension`) or the full internal key |
| | 479 | * (e.g. `third-party/SillyTavern-MyExtension`). Returns null if the extension is not found. |
| | 480 | * @param {string} name - Extension name or internal key |
| | 481 | * @returns {object|null} Cloned manifest object, or null if not found |
| | 482 | */ |
| | 483 | export function getExtensionManifest(name) { |
| | 484 | const found = extensionNames.find(extName => |
| | 485 | equalsIgnoreCaseAndAccents(extName, name) || equalsIgnoreCaseAndAccents(extName, `third-party/${name}`), |
| | 486 | ); |
| | 487 | const manifest = found ? manifests[found] : null; |
| | 488 | return manifest ? structuredClone(manifest) : null; |
| | 489 | } |
| | 490 | |
| | 491 | /** |
| 477 | * Loads manifest.json files for extensions. | 492 | * Loads manifest.json files for extensions. |
| 478 | * @param {string[]} names Array of extension names | 493 | * @param {string[]} names Array of extension names |
| 479 | * @returns {Promise<Record<string, object>>} Object with extension names as keys and their manifests as values | 494 | * @returns {Promise<Record<string, object>>} Object with extension names as keys and their manifests as values |