function decodeArg()

in src/web/src/views/workspace/WSEditorCommandArgumentsContent.tsx [2401:2550]


function decodeArg(response: any): {
  arg: CMDArg;
  clsDefineMap: ClsArgDefinitionMap;
} {
  const { argBase, clsDefineMap } = decodeArgBase(response);
  const options = (response.options as string[]).sort((a, b) => a.length - b.length).reverse();
  const help = response.help ? decodeArgHelp(response.help) : undefined;
  const prompt = response.prompt ? decodeArgPromptInput(response.prompt) : undefined;

  let arg: any = {
    ...argBase,
    var: response.var as string,
    options: options,
    required: (response.required ?? false) as boolean,
    stage: (response.stage ?? "Stable") as "Stable" | "Preview" | "Experimental",
    hide: (response.hide ?? false) as boolean,
    group: (response.group ?? "") as string,
    help: help,
    idPart: response.idPart,
    prompt: prompt,
    configurationKey: response.configurationKey,
    supportEnumExtension: response.enum?.supportExtension || response.item?.enum?.supportExtension || false,
    hasEnum: response.enum?.items?.length > 0 || response.item?.enum?.items?.length > 0 || false,
  };

  switch (argBase.type) {
    case "byte":
    case "binary":
    case "duration":
    case "date":
    case "dateTime":
    case "time":
    case "uuid":
    case "SubscriptionId":
    case "ResourceGroupName":
    case "ResourceId":
    case "ResourceLocation":
    case "string":
      if (response.default) {
        arg = {
          ...arg,
          default: decodeArgDefault<string>(response.default),
        };
      }
      break;
    case "password":
      if (response.prompt) {
        arg = {
          ...arg,
          prompt: decodePasswordArgPromptInput(response.prompt),
        };
      }
      if (response.default) {
        arg = {
          ...arg,
          default: decodeArgDefault<string>(response.default),
        };
      }
      break;
    case "integer32":
    case "integer64":
    case "integer":
      if (response.default) {
        arg = {
          ...arg,
          default: decodeArgDefault<number>(response.default),
        };
      }
      break;
    case "float32":
    case "float64":
    case "float":
      if (response.default) {
        arg = {
          ...arg,
          default: decodeArgDefault<number>(response.default),
        };
      }
      break;
    case "boolean":
      if (response.default) {
        arg = {
          ...arg,
          default: decodeArgDefault<boolean>(response.default),
        };
      }
      break;
    case "any":
      if (response.default) {
        arg = {
          ...arg,
          default: decodeArgDefault<any>(response.default),
        };
      }
      break;
    case "object":
      if (response.default) {
        arg = {
          ...arg,
          default: decodeArgDefault<object>(response.default),
        };
      }
      break;
    default:
      if (argBase.type.startsWith("dict<")) {
        // dict type
        if (response.default) {
          arg = {
            ...arg,
            default: decodeArgDefault<object>(response.default),
          };
        }
      } else if (argBase.type.startsWith("array<")) {
        // array type
        if (response.singularOptions) {
          arg = {
            ...arg,
            singularOptions: response.singularOptions as string[],
          };
        }
        if (response.default) {
          arg = {
            ...arg,
            default: decodeArgDefault<Array<any>>(response.default),
          };
        }
      } else if (argBase.type.startsWith("@")) {
        if (response.singularOptions) {
          arg = {
            ...arg,
            singularOptions: response.singularOptions as string[],
          };
        }
        if (response.default) {
          arg = {
            ...arg,
            default: decodeArgDefault<any>(response.default),
          };
        }
      } else {
        console.error(`Unknown type '${argBase.type}'`);
        throw Error(`Unknown type '${argBase.type}'`);
      }
  }

  return {
    arg: arg,
    clsDefineMap: clsDefineMap,
  };
}