export function setDefaultOptions()

in packages/synthetics-sdk-broken-links/src/options_func.ts [233:335]


export function setDefaultOptions(
  inputOptions: BrokenLinkCheckerOptions
): BrokenLinksResultV1_BrokenLinkCheckerOptions {
  const defaultOptions: BrokenLinksResultV1_BrokenLinkCheckerOptions = {
    origin_uri: '',
    link_limit: 10,
    query_selector_all: 'a',
    get_attributes: ['href'],
    link_order: BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder.FIRST_N,
    link_timeout_millis: 30000,
    max_retries: 0,
    wait_for_selector: '',
    per_link_options: {},
    total_synthetic_timeout_millis: 60000,
    screenshot_options: {
      capture_condition: ApiCaptureCondition.NONE,
      storage_location: '',
    },
  };

  const outputOptions: BrokenLinksResultV1_BrokenLinkCheckerOptions =
    {} as BrokenLinksResultV1_BrokenLinkCheckerOptions;

  const optionsKeys = Object.keys(defaultOptions) as Array<
    keyof BrokenLinksResultV1_BrokenLinkCheckerOptions
  >;
  for (const optionName of optionsKeys) {
    // per_link_options and linkorder are handled below
    if (
      optionName === 'per_link_options' ||
      optionName === 'link_order' ||
      optionName === 'screenshot_options'
    )
      continue;

    if (
      !(optionName in inputOptions) ||
      // eslint-disable-next-line  @typescript-eslint/no-explicit-any
      (inputOptions as any)[optionName] === undefined
    ) {
      // eslint-disable-next-line  @typescript-eslint/no-explicit-any
      (outputOptions as any)[optionName] = defaultOptions[optionName];
    } else {
      // eslint-disable-next-line  @typescript-eslint/no-explicit-any
      (outputOptions as any)[optionName] = inputOptions[optionName];
    }
  }

  // converting inputOptions.screenshot_options to
  // BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions
  outputOptions.screenshot_options =
    {} as BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions;
  if (inputOptions.screenshot_options?.capture_condition) {
    outputOptions.screenshot_options!.capture_condition =
      ApiCaptureCondition[inputOptions.screenshot_options.capture_condition];
  } else {
    outputOptions.screenshot_options!.capture_condition =
      defaultOptions.screenshot_options!.capture_condition;
  }

  if (inputOptions.screenshot_options?.storage_location) {
    outputOptions.screenshot_options.storage_location =
      inputOptions.screenshot_options!.storage_location!;
  } else {
    outputOptions.screenshot_options.storage_location =
      defaultOptions.screenshot_options!.storage_location!;
  }

  // converting inputOptions.link_order, type: LinkOrder to
  // outputOptions.link_order, type BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder
  if (inputOptions.link_order) {
    outputOptions.link_order =
      BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder[
        inputOptions.link_order
      ];
  } else {
    outputOptions.link_order = defaultOptions.link_order;
  }

  // Convert `inputOptions.per_link_options`, type: {[key: string]: PerLinkOption}
  // to `outputOptions.per_links_options`, type: {[key: string]: BrokenLinksResultV1_BrokenLinkCheckerOptions_PerLinkOption}
  const perLinkOptions: {
    [key: string]: BrokenLinksResultV1_BrokenLinkCheckerOptions_PerLinkOption;
  } = {};
  for (const [uri, perLinkOption] of Object.entries(
    inputOptions.per_link_options || {}
  )) {
    const expected_status_code = inputExpectedStatusToResponseStatusCode(
      perLinkOption.expected_status_code
    );

    const convertedPerLinkOption: BrokenLinksResultV1_BrokenLinkCheckerOptions_PerLinkOption =
      {
        expected_status_code: expected_status_code,
        link_timeout_millis:
          perLinkOption.link_timeout_millis ||
          outputOptions.link_timeout_millis,
      };
    perLinkOptions[uri] = convertedPerLinkOption;
  }
  outputOptions.per_link_options = perLinkOptions;
  return outputOptions;
}