Home / Function/ parseReferenceType() — supabase Function Reference

parseReferenceType() — supabase Function Reference

Architecture documentation for the parseReferenceType() function in Reference.typeSpec.ts from the supabase codebase.

Entity Profile

Dependency Diagram

graph TD
  fb700c5e_f2ad_0d4a_eeb3_3a30e4641ed9["parseReferenceType()"]
  ba4cce53_051e_d69f_25a4_55d567b053b3["parseType()"]
  ba4cce53_051e_d69f_25a4_55d567b053b3 -->|calls| fb700c5e_f2ad_0d4a_eeb3_3a30e4641ed9
  a332c905_4ed4_b6ac_e01a_4884e6eb498f["delegateParsing()"]
  fb700c5e_f2ad_0d4a_eeb3_3a30e4641ed9 -->|calls| a332c905_4ed4_b6ac_e01a_4884e6eb498f
  631d0381_6b79_8c3d_38e4_afc9293b54b3["parseRecordType()"]
  fb700c5e_f2ad_0d4a_eeb3_3a30e4641ed9 -->|calls| 631d0381_6b79_8c3d_38e4_afc9293b54b3
  c156f968_9bbd_a682_ae7b_67b0fd9615bc["parsePromiseType()"]
  fb700c5e_f2ad_0d4a_eeb3_3a30e4641ed9 -->|calls| c156f968_9bbd_a682_ae7b_67b0fd9615bc
  45153684_fe4c_47f8_72c2_8f51b69d530e["parseExtractType()"]
  fb700c5e_f2ad_0d4a_eeb3_3a30e4641ed9 -->|calls| 45153684_fe4c_47f8_72c2_8f51b69d530e
  66cf9bd2_2d9e_7ce9_7394_95c0d7b0ec67["parsePickType()"]
  fb700c5e_f2ad_0d4a_eeb3_3a30e4641ed9 -->|calls| 66cf9bd2_2d9e_7ce9_7394_95c0d7b0ec67
  bb35b968_1ae9_db1c_a12e_e55dad7ed403["isNewTypedoc()"]
  fb700c5e_f2ad_0d4a_eeb3_3a30e4641ed9 -->|calls| bb35b968_1ae9_db1c_a12e_e55dad7ed403
  d105b729_ca48_607f_7baa_fa9d3ca5ec8f["parseInterface()"]
  fb700c5e_f2ad_0d4a_eeb3_3a30e4641ed9 -->|calls| d105b729_ca48_607f_7baa_fa9d3ca5ec8f
  ba4cce53_051e_d69f_25a4_55d567b053b3["parseType()"]
  fb700c5e_f2ad_0d4a_eeb3_3a30e4641ed9 -->|calls| ba4cce53_051e_d69f_25a4_55d567b053b3
  style fb700c5e_f2ad_0d4a_eeb3_3a30e4641ed9 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

apps/docs/features/docs/Reference.typeSpec.ts lines 694–783

function parseReferenceType(type: any, map: Map<number, any>, typeArguments?: any, debug = false) {
  if (type.dereferenced?.type) {
    return delegateParsing(type, type.dereferenced.type, map)
  }

  if (type.dereferenced?.kindString) {
    return delegateParsing(type, type.dereferenced, map)
  }

  if (type.refersToTypeParameter === true && typeArguments?.[0]) {
    return delegateParsing(type, typeArguments?.[0], map)
  }

  if (
    type.package === 'typescript' &&
    (type.name === 'Record' || type.qualifiedName === 'Record')
  ) {
    return parseRecordType(type, map)
  }

  if (
    type.package === 'typescript' &&
    (type.name === 'Promise' || type.qualifiedName === 'Promise')
  ) {
    return parsePromiseType(type, map)
  }

  if (
    type.package === 'typescript' &&
    (type.name === 'Extract' || type.qualifiedName === 'Extract')
  ) {
    return parseExtractType(type, map)
  }

  if (type.package === 'typescript' && (type.name === 'Pick' || type.qualifiedName === 'Pick')) {
    return parsePickType(type, map)
  }

  // If we still haven't produced a meaningful type, try looking up the reference
  const referenced = map.get(type.id ?? type.target) // became target in newer versions of tsdoc
  if (referenced) {
    const maybeType =
      typeof referenced.type === 'object' && 'type' in referenced.type
        ? /* need to go down a level */ delegateParsing(
            type,
            referenced.type,
            map,
            typeArguments ?? type.typeArguments
          )
        : delegateParsing(type, referenced, map, typeArguments ?? type.typeArguments)

    if (maybeType) {
      return maybeType
    } else if (isNewTypedoc(referenced) && referenced.kind === KIND_INTERFACE) {
      return parseInterface(referenced, map, typeArguments ?? type.typeArguments)
    } else if (isNewTypedoc(referenced) && referenced.kind === KIND_CLASS) {
      // Class is too complicated to display here, just return its name
      return {
        type: 'nameOnly',
        name: referenced.name,
      }
    }
  }

  // We produced nothing, let's just return some strings in case they're in any
  // way meaningful.
  if (type.package && type.qualifiedName) {
    return {
      type: 'nameOnly',
      name:
        type.package === 'typescript'
          ? type.qualifiedName
          : `${type.package}.${type.qualifiedName}`,
    }
  }

  if (type.name === 'default' && type.typeArguments?.[0]) {
    return parseType(type.typeArguments[0], map)
  }

  // Final fallback
  if (type.name && type.name !== 'default' /* Not particularly meaningful */) {
    return {
      type: 'nameOnly',
      name: type.name,
    }
  }

  return undefined
}

Subdomains

Called By

Frequently Asked Questions

What does parseReferenceType() do?
parseReferenceType() is a function in the supabase codebase.
What does parseReferenceType() call?
parseReferenceType() calls 8 function(s): delegateParsing, isNewTypedoc, parseExtractType, parseInterface, parsePickType, parsePromiseType, parseRecordType, parseType.
What calls parseReferenceType()?
parseReferenceType() is called by 1 function(s): parseType.

Analyze Your Own Codebase

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

Try Supermodel Free