Home / Function/ getAvailableComputeOptions() — supabase Function Reference

getAvailableComputeOptions() — supabase Function Reference

Architecture documentation for the getAvailableComputeOptions() function in DiskManagement.utils.ts from the supabase codebase.

Entity Profile

Dependency Diagram

graph TD
  615adce6_538e_53e8_d90c_1aa23c10d40c["getAvailableComputeOptions()"]
  123688a6_401c_ee61_a6d4_f7478222cf84["DiskManagementReviewAndSubmitDialog()"]
  123688a6_401c_ee61_a6d4_f7478222cf84 -->|calls| 615adce6_538e_53e8_d90c_1aa23c10d40c
  89db9652_2ad7_69fe_cba1_2cfbc054b2c2["ComputeSizeField()"]
  89db9652_2ad7_69fe_cba1_2cfbc054b2c2 -->|calls| 615adce6_538e_53e8_d90c_1aa23c10d40c
  72292d0f_dece_a8e4_441d_d080acc0d2c5["isProjectAddonVariantMeta()"]
  615adce6_538e_53e8_d90c_1aa23c10d40c -->|calls| 72292d0f_dece_a8e4_441d_d080acc0d2c5
  style 615adce6_538e_53e8_d90c_1aa23c10d40c fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

apps/studio/components/interfaces/DiskManagement/DiskManagement.utils.ts lines 210–282

export function getAvailableComputeOptions(
  availableAddons: AvailableAddon[],
  projectCloudProvider?: string
) {
  const computeAddon = availableAddons.find((addon) => addon.type === 'compute_instance')
  const computeOptions: ComputeAddonVariant[] =
    computeAddon?.variants.flatMap((option) => {
      const parsedId = computeInstanceAddonVariantIdSchema.safeParse(option.identifier)
      if (!parsedId.success) return []

      if (projectCloudProvider && isProjectAddonVariantMeta(option.meta)) {
        const isSupported =
          !option.meta.supported_cloud_providers ||
          option.meta.supported_cloud_providers.includes(projectCloudProvider)
        if (!isSupported) return []
      }

      return [
        {
          ...option,
          identifier: parsedId.data,
          meta: isProjectAddonVariantMeta(option.meta) ? option.meta : undefined,
        },
      ]
    }) ?? []

  function hasMicroOptionFromApi() {
    return (computeAddon?.variants ?? []).some((variant) => variant.identifier === 'ci_micro')
  }

  // Backwards comp until API is deployed
  if (!hasMicroOptionFromApi()) {
    // Unshift to push to start of array
    computeOptions.unshift({
      identifier: 'ci_micro',
      name: 'Micro',
      price_description: '$0.01344/hour (~$10/month)',
      price: 0.01344,
      price_interval: 'hourly',
      price_type: 'usage',
      meta: {
        cpu_cores: INSTANCE_MICRO_SPECS.cpu_cores,
        cpu_dedicated: INSTANCE_MICRO_SPECS.cpu_dedicated,
        memory_gb: INSTANCE_MICRO_SPECS.memory_gb,
        baseline_disk_io_mbs: INSTANCE_MICRO_SPECS.baseline_disk_io_mbs,
        max_disk_io_mbs: INSTANCE_MICRO_SPECS.max_disk_io_mbs,
        connections_direct: INSTANCE_MICRO_SPECS.connections_direct,
        connections_pooler: INSTANCE_MICRO_SPECS.connections_pooler,
      } as ProjectAddonVariantMeta,
    })
  }

  computeOptions.unshift({
    identifier: 'ci_nano',
    name: 'Nano',
    price_description: '$0/hour (~$0/month)',
    price: 0,
    price_interval: 'hourly',
    price_type: 'usage',
    // @ts-ignore API types it as Record<string, never>
    meta: {
      cpu_cores: INSTANCE_NANO_SPECS.cpu_cores,
      cpu_dedicated: INSTANCE_NANO_SPECS.cpu_dedicated,
      memory_gb: INSTANCE_NANO_SPECS.memory_gb,
      baseline_disk_io_mbs: INSTANCE_NANO_SPECS.baseline_disk_io_mbs,
      max_disk_io_mbs: INSTANCE_NANO_SPECS.max_disk_io_mbs,
      connections_direct: INSTANCE_NANO_SPECS.connections_direct,
      connections_pooler: INSTANCE_NANO_SPECS.connections_pooler,
    } as ProjectAddonVariantMeta,
  })

  return computeOptions
}

Subdomains

Frequently Asked Questions

What does getAvailableComputeOptions() do?
getAvailableComputeOptions() is a function in the supabase codebase.
What does getAvailableComputeOptions() call?
getAvailableComputeOptions() calls 1 function(s): isProjectAddonVariantMeta.
What calls getAvailableComputeOptions()?
getAvailableComputeOptions() is called by 2 function(s): ComputeSizeField, DiskManagementReviewAndSubmitDialog.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free