* Get parameter names covered by a preset. * Returns empty set if preset not found (allows creation to proceed without preset params).
(
templateName: string,
presetName: string,
org?: string,
signal?: AbortSignal
)
| 673 | * Returns empty set if preset not found (allows creation to proceed without preset params). |
| 674 | */ |
| 675 | private async getPresetParamNames( |
| 676 | templateName: string, |
| 677 | presetName: string, |
| 678 | org?: string, |
| 679 | signal?: AbortSignal |
| 680 | ): Promise<Set<string>> { |
| 681 | try { |
| 682 | const args = ["templates", "presets", "list", templateName, "--output=json"]; |
| 683 | if (org) args.push("--org", org); |
| 684 | const stdout = await this.runCoderJsonCommand(args, { signal }); |
| 685 | |
| 686 | // Same non-JSON guard as listPresets (CLI prints info message for no presets) |
| 687 | if (!stdout.trim() || !stdout.trimStart().startsWith("[")) { |
| 688 | return new Set(); |
| 689 | } |
| 690 | |
| 691 | const raw = JSON.parse(stdout) as Array<{ |
| 692 | TemplatePreset: { |
| 693 | Name: string; |
| 694 | Parameters?: Array<{ Name: string }>; |
| 695 | }; |
| 696 | }>; |
| 697 | |
| 698 | const preset = raw.find((p) => p.TemplatePreset.Name === presetName); |
| 699 | if (!preset?.TemplatePreset.Parameters) { |
| 700 | return new Set(); |
| 701 | } |
| 702 | |
| 703 | return new Set(preset.TemplatePreset.Parameters.map((p) => p.Name)); |
| 704 | } catch (error) { |
| 705 | if (signal?.aborted) { |
| 706 | throw error; |
| 707 | } |
| 708 | log.debug("Failed to get preset param names", { templateName, presetName, error }); |
| 709 | return new Set(); |
| 710 | } |
| 711 | } |
| 712 | |
| 713 | /** |
| 714 | * Parse rich parameter data from the Coder API. |
no test coverage detected