applyParameterMergeStrategy() — supabase Function Reference
Architecture documentation for the applyParameterMergeStrategy() function in Reference.ui.tsx from the supabase codebase.
Entity Profile
Dependency Diagram
graph TD 0d8ae9b2_c5f8_176f_13bd_7227362247f5["applyParameterMergeStrategy()"] d7f586bf_3c23_4329_d90e_5b64a841fa80["mergeAlternateParameters()"] d7f586bf_3c23_4329_d90e_5b64a841fa80 -->|calls| 0d8ae9b2_c5f8_176f_13bd_7227362247f5 style 0d8ae9b2_c5f8_176f_13bd_7227362247f5 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
apps/docs/features/docs/Reference.ui.tsx lines 762–889
function applyParameterMergeStrategy(
parameter: Pick<FunctionParameterType, 'type'>,
alternateParameter: Pick<FunctionParameterType, 'type'>
) {
if (!alternateParameter.type) {
// Nothing to merge, abort
return parameter as FunctionParameterType
}
const clonedParameter = JSON.parse(JSON.stringify(parameter)) as FunctionParameterType
if (!clonedParameter.type) {
clonedParameter.type = alternateParameter.type
return clonedParameter
}
switch (clonedParameter.type.type) {
case 'nameOnly':
mergeIntoUnion()
break
case 'literal':
mergeIntoUnion()
break
case 'record':
mergeIntoUnion()
break
case 'union':
if (alternateParameter.type.type === 'union') {
// Both unions, merge them
for (const alternateSubType of alternateParameter.type.subTypes) {
if (
!clonedParameter.type.subTypes.some((subType) => isEqual(subType, alternateSubType))
) {
clonedParameter.type.subTypes.push(alternateSubType)
}
}
} else {
if (
!clonedParameter.type.subTypes.some((subType) =>
isEqual(subType, alternateParameter.type)
)
) {
clonedParameter.type.subTypes.push(alternateParameter.type)
}
}
break
case 'object':
if (alternateParameter.type.type === 'object') {
// Check if the base and alternate parameters have different sets of
// required properties. If so, they can't be merged without loss of
// meaning and have to be represented as a union.
const requiredOriginalProperties = new Set(
clonedParameter.type.properties.filter(
// @ts-ignore -- NA introduced as an additional flag for display logic
(property) => property.isOptional !== true && property.isOptional !== 'NA'
)
)
const requiredAlternateProperties = new Set(
alternateParameter.type.properties.filter(
// @ts-ignore -- NA introduced as an additional flag for display logic
(property) => property.isOptional !== true && property.isOptional !== 'NA'
)
)
if (requiredOriginalProperties.size !== requiredAlternateProperties.size) {
mergeIntoUnion()
break
}
const union = new Set([...requiredOriginalProperties, ...requiredAlternateProperties])
if (union.size !== requiredOriginalProperties.size) {
mergeIntoUnion()
break
}
const clonedParametersByName = new Map(
clonedParameter.type.properties.map((property) => [property.name, property])
)
const alternateParametersByName = new Map(
alternateParameter.type.properties.map((property) => [property.name, property])
)
for (const [key, alternateValue] of alternateParametersByName) {
if (clonedParametersByName.has(key)) {
clonedParametersByName.set(
key,
applyParameterMergeStrategy(clonedParametersByName.get(key)!, alternateValue)
)
} else {
clonedParametersByName.set(key, alternateValue)
}
}
clonedParameter.type.properties = [...clonedParametersByName.values()]
} else {
mergeIntoUnion()
}
}
return clonedParameter as FunctionParameterType
/*********
* Utils *
*********/
function mergeIntoUnion() {
if (alternateParameter.type?.type === 'union') {
const originalType = clonedParameter.type
if (
alternateParameter.type.subTypes.some((subType) => isEqual(subType, clonedParameter.type))
) {
clonedParameter.type = alternateParameter.type
} else {
clonedParameter.type = {
type: 'union',
subTypes: [originalType as TypeDetails, ...(alternateParameter.type?.subTypes || [])],
}
}
} else {
const originalType = parameter.type
if (!isEqual(originalType, alternateParameter.type)) {
clonedParameter.type = {
type: 'union',
subTypes: [originalType as TypeDetails, alternateParameter.type!],
}
}
}
}
}
Domain
Subdomains
Called By
Source
Frequently Asked Questions
What does applyParameterMergeStrategy() do?
applyParameterMergeStrategy() is a function in the supabase codebase.
What calls applyParameterMergeStrategy()?
applyParameterMergeStrategy() is called by 1 function(s): mergeAlternateParameters.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free