diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index f41ba01bee95a..0f12da325050c 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -19433,6 +19433,14 @@ func (c *Checker) resolveTypeReferenceMembers(t *Type) { source := t.Target() typeParameters := source.AsInterfaceType().allTypeParameters typeArguments := c.getTypeArguments(t) + // Share member instantiations across equivalent mapped arrays and tuples while leaving + // their original deferred references intact for aliases and recursion tracking. + typeArguments = core.SameMap(typeArguments, func(arg *Type) *Type { + if isDeferredMappedTypeReference(arg) { + return c.createTypeReference(arg.Target(), c.getTypeArguments(arg)) + } + return arg + }) paddedTypeArguments := typeArguments if len(typeArguments) == len(typeParameters)-1 { paddedTypeArguments = core.Concatenate(typeArguments, []*Type{t}) @@ -22257,6 +22265,7 @@ func (c *Checker) getTypeArguments(t *Type) []*Type { } var typeArguments []*Type node := t.AsTypeReference().node + mapper := d.mapper if node != nil { switch node.Kind { case ast.KindTypeReference: @@ -22265,19 +22274,37 @@ func (c *Checker) getTypeArguments(t *Type) []*Type { typeArguments = []*Type{c.getTypeFromTypeNode(node.AsArrayTypeNode().ElementType)} case ast.KindTupleType: typeArguments = core.Map(node.Elements(), c.getTypeFromTypeNode) + case ast.KindMappedType: + mappedType := c.getTypeFromTypeNode(node) + typeVariable := c.getHomomorphicTypeVariable(mappedType) + source := c.instantiateType(typeVariable, mapper) + if isTupleType(source) { + mapped := c.instantiateMappedTupleTypeEager(source, mappedType, typeVariable, mapper) + if mapped == c.errorType { + typeArguments = slices.Repeat([]*Type{c.errorType}, len(n.TypeParameters())) + } else { + typeArguments = c.getTypeArguments(mapped) + } + } else { + typeArguments = []*Type{c.instantiateMappedTypeTemplate(mappedType, c.numberType, true /*isOptional*/, mapper)} + } + mapper = nil default: panic("Unhandled case in getTypeArguments") } } if c.popTypeResolution() { if d.resolvedTypeArguments == nil { - d.resolvedTypeArguments = c.instantiateTypes(typeArguments, d.mapper) + d.resolvedTypeArguments = c.instantiateTypes(typeArguments, mapper) } } else { if d.resolvedTypeArguments == nil { d.resolvedTypeArguments = slices.Repeat([]*Type{c.errorType}, len(n.TypeParameters())) } errorNode := core.IfElse(node != nil, node, c.currentNode) + if node != nil && node.Kind == ast.KindMappedType { + errorNode = c.currentNode + } if d.target.symbol != nil { c.error(errorNode, diagnostics.Type_arguments_for_0_circularly_reference_themselves, c.symbolToString(d.target.symbol)) } else { @@ -22455,6 +22482,8 @@ func (c *Checker) symbolIsValueEx(symbol *ast.Symbol, includeTypeOnlyMembers boo c.getSymbolFlagsEx(symbol, !includeTypeOnlyMembers, false /*excludeLocalMeanings*/)&ast.SymbolFlagsValue != 0 } +const maxTypeInstantiationDepth = 100 + func (c *Checker) instantiateType(t *Type, m *TypeMapper) *Type { return c.instantiateTypeWithAlias(t, m, nil /*alias*/) } @@ -22466,7 +22495,7 @@ func (c *Checker) instantiateTypeWithAlias(t *Type, m *TypeMapper, alias *TypeAl if t == nil || m == nil || !(c.couldContainTypeVariables(t) || (t.alias != nil && len(t.alias.typeArguments) > 0 && core.Some(t.alias.typeArguments, c.couldContainTypeVariables))) { return t } - if c.instantiationDepth == 100 || c.instantiationCount >= 5_000_000 { + if c.instantiationDepth == maxTypeInstantiationDepth || c.instantiationCount >= 5_000_000 { // We have reached 100 recursive type instantiations, or 5M type instantiations caused by the same statement // or expression. There is a very high likelihood we're dealing with a combination of infinite generic types // that perpetually generate new type identities, so we stop the recursion here by yielding the error type. @@ -22736,6 +22765,9 @@ func (c *Checker) getObjectTypeInstantiation(t *Type, m *TypeMapper, alias *Type result = c.createDeferredTypeReference(t.Target(), t.AsTypeReference().node, newMapper, newAlias) case target.objectFlags&ObjectFlagsMapped != 0: result = c.instantiateMappedType(target, newMapper, newAlias) + if newAlias != nil && isDeferredMappedTypeReference(result) && result.alias != newAlias { + result = c.createDeferredTypeReference(result.Target(), result.AsTypeReference().node, result.Mapper(), newAlias) + } default: result = c.instantiateAnonymousType(target, newMapper, newAlias) } @@ -22851,6 +22883,22 @@ func (c *Checker) getConditionalTypeInstantiation(t *Type, mapper *TypeMapper, f result := root.instantiations[key] if result == nil { newMapper := newTypeMapper(root.outerTypeParameters, typeArguments) + instantiate := func(m *TypeMapper, alias *TypeAlias) *Type { + instantiated := c.getConditionalType(root, m, forConstraint, alias) + // Preserve the alias on a deferred type reference without modifying a shared instantiation. + // Constraint approximations need not be equivalent to the original conditional type. + if !forConstraint && isDeferredMappedTypeReference(instantiated) && instantiated.alias == nil { + if alias == nil { + alias = c.instantiateTypeAlias(root.alias, m) + } + if alias != nil { + reference := c.createDeferredTypeReference(instantiated.Target(), instantiated.AsTypeReference().node, instantiated.Mapper(), alias) + reference.objectFlags |= instantiated.objectFlags & (ObjectFlagsCouldContainTypeVariablesComputed | ObjectFlagsCouldContainTypeVariables) + instantiated = reference + } + } + return instantiated + } checkType := root.checkType var distributionType *Type if root.isDistributive { @@ -22861,10 +22909,10 @@ func (c *Checker) getConditionalTypeInstantiation(t *Type, mapper *TypeMapper, f // result is (A extends U ? X : Y) | (B extends U ? X : Y). if distributionType != nil && checkType != distributionType && distributionType.flags&(TypeFlagsUnion|TypeFlagsNever) != 0 { result = c.mapTypeWithAlias(distributionType, func(t *Type) *Type { - return c.getConditionalType(root, prependTypeMapping(checkType, t, newMapper), forConstraint, nil) + return instantiate(prependTypeMapping(checkType, t, newMapper), nil) }, alias) } else { - result = c.getConditionalType(root, newMapper, forConstraint, alias) + result = instantiate(newMapper, alias) } root.instantiations[key] = result } @@ -22941,14 +22989,59 @@ func (c *Checker) hasArrayOrTypeTypeConstraint(typeVariable *Type) bool { } func (c *Checker) instantiateMappedArrayType(arrayType *Type, mappedType *Type, m *TypeMapper) *Type { - elementType := c.instantiateMappedTypeTemplate(mappedType, c.numberType, true /*isOptional*/, m) - if c.isErrorType(elementType) { - return c.errorType + readonly := getModifiedReadonlyState(c.isReadonlyArrayType(arrayType), getMappedTypeModifiers(mappedType)) + return c.createDeferredMappedTypeReference(core.IfElse(readonly, c.globalReadonlyArrayType, c.globalArrayType), mappedType, m) +} + +func (c *Checker) createDeferredMappedTypeReference(target *Type, mappedType *Type, m *TypeMapper) *Type { + if target == c.emptyGenericType { + return c.emptyObjectType } - return c.createArrayTypeEx(elementType, getModifiedReadonlyState(c.isReadonlyArrayType(arrayType), getMappedTypeModifiers(mappedType))) + // Defer resolution of the type arguments so recursive mapped types can refer to this type. + return c.createDeferredTypeReference(target, mappedType.AsMappedType().declaration.AsNode(), m, nil) +} + +func isDeferredMappedTypeReference(t *Type) bool { + return t.objectFlags&ObjectFlagsReference != 0 && t.AsTypeReference().node != nil && t.AsTypeReference().node.Kind == ast.KindMappedType } func (c *Checker) instantiateMappedTupleType(tupleType *Type, mappedType *Type, typeVariable *Type, m *TypeMapper) *Type { + if isGenericTupleType(tupleType) { + // Mapping a variadic element can change the tuple's shape or produce a union of tuples. + return c.instantiateMappedTupleTypeEager(tupleType, mappedType, typeVariable, m) + } + modifiers := getMappedTypeModifiers(mappedType) + elementInfos := getMappedTupleElementInfos(tupleType, modifiers) + readonly := getModifiedReadonlyState(tupleType.TargetTupleType().readonly, modifiers) + if modifiers&MappedTypeModifiersIncludeOptional != 0 && tupleType.TargetTupleType().combinedFlags&ElementFlagsRest != 0 { + // Optional elements after a rest element collapse into that rest. Without variadic elements, + // normalization of the shape is independent of the mapped element types. + normalizer := &TupleNormalizer{} + if !normalizer.normalize(c, c.getElementTypes(tupleType), elementInfos) { + return c.errorType + } + elementInfos = normalizer.infos + } + target := c.getTupleTargetType(elementInfos, readonly) + if len(elementInfos) == 0 { + return target + } + return c.createDeferredMappedTypeReference(target, mappedType, prependTypeMapping(typeVariable, tupleType, m)) +} + +func getMappedTupleElementInfos(tupleType *Type, modifiers MappedTypeModifiers) []TupleElementInfo { + return core.SameMap(tupleType.TargetTupleType().elementInfos, func(info TupleElementInfo) TupleElementInfo { + switch { + case modifiers&MappedTypeModifiersIncludeOptional != 0 && info.flags&ElementFlagsRequired != 0: + info.flags = ElementFlagsOptional + case modifiers&MappedTypeModifiersExcludeOptional != 0 && info.flags&ElementFlagsOptional != 0: + info.flags = ElementFlagsRequired + } + return info + }) +} + +func (c *Checker) instantiateMappedTupleTypeEager(tupleType *Type, mappedType *Type, typeVariable *Type, m *TypeMapper) *Type { // We apply the mapped type's template type to each of the fixed part elements. For variadic elements, we // apply the mapped type itself to the variadic element type. For other elements in the variable part of the // tuple, we surround the element type with an array type and apply the mapped type to that. This ensures @@ -22967,7 +23060,7 @@ func (c *Checker) instantiateMappedTupleType(tupleType *Type, mappedType *Type, modifiers := getMappedTypeModifiers(mappedType) elementTypes := c.getElementTypes(tupleType) newElementTypes := make([]*Type, len(elementTypes)) - newElementInfos := slices.Clone(elementInfos) + newElementInfos := getMappedTupleElementInfos(tupleType, modifiers) for i, e := range elementTypes { flags := elementInfos[i].flags var mapped *Type @@ -22982,16 +23075,6 @@ func (c *Checker) instantiateMappedTupleType(tupleType *Type, mappedType *Type, mapped = c.unknownType } } - switch { - case modifiers&MappedTypeModifiersIncludeOptional != 0: - if flags&ElementFlagsRequired != 0 { - newElementInfos[i].flags = ElementFlagsOptional - } - case modifiers&MappedTypeModifiersExcludeOptional != 0: - if flags&ElementFlagsOptional != 0 { - newElementInfos[i].flags = ElementFlagsRequired - } - } newElementTypes[i] = mapped } newReadonly := getModifiedReadonlyState(tupleType.TargetTupleType().readonly, getMappedTypeModifiers(mappedType)) @@ -28273,6 +28356,9 @@ func (c *Checker) getNormalizedType(t *Type, writing bool) *Type { n = t.AsLiteralType().regularType case c.isGenericTupleType(t): n = c.getNormalizedTupleType(t, writing) + case isDeferredMappedTypeReference(t): + // Preserve the deferred mapped type reference's recursion identity during type comparison. + return t case t.objectFlags&ObjectFlagsReference != 0: if t.AsTypeReference().node != nil { n = c.createTypeReference(t.Target(), c.getTypeArguments(t)) diff --git a/tsc/internal/checker/nodebuilderimpl.go b/tsc/internal/checker/nodebuilderimpl.go index 5cd58f6ec95f0..5c82200c7a895 100644 --- a/tsc/internal/checker/nodebuilderimpl.go +++ b/tsc/internal/checker/nodebuilderimpl.go @@ -23,8 +23,7 @@ import ( type CompositeSymbolIdentity struct { isConstructorNode bool - symbolId ast.SymbolId - nodeId ast.NodeId + identity RecursionId } type TrackedSymbolArgs struct { @@ -2372,6 +2371,10 @@ func (b *NodeBuilderImpl) serializeTypeForDeclaration(declaration *ast.Declarati const MAX_REVERSE_MAPPED_NESTING_INSPECTION_DEPTH = 3 func (b *NodeBuilderImpl) shouldUsePlaceholderForProperty(propertySymbol *ast.Symbol) bool { + // Reverse mapped type placeholders are for display, not declaration emit. + if b.ctx.flags&nodebuilder.FlagsAllowAnonymousIdentifier == 0 { + return false + } // Use placeholders for reverse mapped types we've either // (1) already descended into, or // (2) are nested reverse mappings within a mapping over a non-anonymous type, or @@ -2735,7 +2738,11 @@ func (b *NodeBuilderImpl) createTypeNodesFromResolvedType(resolvedType *Structur typeElements = append(typeElements, b.signatureToSignatureDeclarationHelper(signature, ast.KindConstructSignature, nil)) } for _, info := range resolvedType.indexInfos { - typeElements = slices.Concat(typeElements, b.indexInfoToObjectComputedNamesOrSignatureDeclaration(info, core.IfElse(resolvedType.objectFlags&ObjectFlagsReverseMapped != 0, b.createElidedInformationPlaceholder(), nil))) + var typeNode *ast.TypeNode + if resolvedType.objectFlags&ObjectFlagsReverseMapped != 0 && b.ctx.flags&nodebuilder.FlagsAllowAnonymousIdentifier != 0 { + typeNode = b.createElidedInformationPlaceholder() + } + typeElements = slices.Concat(typeElements, b.indexInfoToObjectComputedNamesOrSignatureDeclaration(info, typeNode)) } properties := resolvedType.properties @@ -2877,8 +2884,12 @@ func (b *NodeBuilderImpl) shouldWriteTypeOfFunctionSymbol(symbol *ast.Symbol, ty } } if isStaticMethodSymbol || isNonLocalFunctionSymbol { - if isFunctionExpressionSymbol && symbol.ValueDeclaration != nil && symbol.ValueDeclaration.Parent != nil && symbol.ValueDeclaration.Parent != b.ctx.enclosingDeclaration { - symbol = b.ch.getMergedSymbol(symbol.ValueDeclaration.Parent.Symbol()) + if isFunctionExpressionSymbol && symbol.ValueDeclaration != nil && symbol.ValueDeclaration.Parent != nil && + (symbol.ValueDeclaration.Parent != b.ctx.enclosingDeclaration || b.ctx.visitedTypes.Has(typeId)) { + variableSymbol := b.ch.getMergedSymbol(symbol.ValueDeclaration.Parent.Symbol()) + if variableSymbol != nil && b.ch.getTypeOfSymbol(variableSymbol).id == typeId { + symbol = variableSymbol + } } // typeof is allowed only for static/non local functions return (b.ctx.flags&nodebuilder.FlagsUseTypeOfFunction != 0 || b.ctx.visitedTypes.Has(typeId)) && // it is type of the symbol uses itself recursively @@ -2924,7 +2935,7 @@ func (b *NodeBuilderImpl) createAnonymousTypeNodeEx(t *Type, forceClassExpansion // in turn try to reuse the same node again. Mark the type as visited around the reuse // attempt so the inner recursion bottoms out via the visitedTypes guard below. if b.ctx.visitedTypes.Has(typeId) { - return b.createElidedInformationPlaceholder() + return b.createCyclicStructurePlaceholder() } b.ctx.visitedTypes.Add(typeId) typeNode := b.tryReuseExistingNonParameterTypeNode(existing, t, nil, nil) @@ -2934,7 +2945,7 @@ func (b *NodeBuilderImpl) createAnonymousTypeNodeEx(t *Type, forceClassExpansion } } if b.ctx.visitedTypes.Has(typeId) { - return b.createElidedInformationPlaceholder() + return b.createCyclicStructurePlaceholder() } return b.visitAndTransformType(t, (*NodeBuilderImpl).createTypeNodeFromObjectType) } @@ -2964,13 +2975,18 @@ func (b *NodeBuilderImpl) createAnonymousTypeNodeEx(t *Type, forceClassExpansion // The specified symbol flags need to be reinterpreted as type flags return b.symbolToTypeNode(typeAlias, ast.SymbolFlagsType, nil) } else { - return b.createElidedInformationPlaceholder() + return b.createCyclicStructurePlaceholder() } } else { return b.visitAndTransformType(t, (*NodeBuilderImpl).createTypeNodeFromObjectType) } + } else if t.objectFlags&ObjectFlagsReverseMapped != 0 && b.ctx.flags&nodebuilder.FlagsAllowAnonymousIdentifier == 0 { + if b.ctx.visitedTypes.Has(typeId) { + return b.createCyclicStructurePlaceholder() + } + return b.visitAndTransformType(t, (*NodeBuilderImpl).createTypeNodeFromObjectType) } else { - // Anonymous types without a symbol are never circular. + // Reverse mapped types use property and index signature placeholders for display. return b.createTypeNodeFromObjectType(t) } } @@ -2995,17 +3011,21 @@ func (b *NodeBuilderImpl) getTypeFromTypeNode(node *ast.TypeNode, noMappedTypes func (b *NodeBuilderImpl) typeToTypeNodeOrCircularityElision(t *Type) *ast.TypeNode { if t.flags&TypeFlagsUnion != 0 { if b.ctx.visitedTypes.Has(t.id) { - if b.ctx.flags&nodebuilder.FlagsAllowAnonymousIdentifier == 0 { - b.ctx.encounteredError = true - b.ctx.tracker.ReportCyclicStructureError() - } - return b.createElidedInformationPlaceholder() + return b.createCyclicStructurePlaceholder() } return b.visitAndTransformType(t, (*NodeBuilderImpl).typeToTypeNode) } return b.typeToTypeNode(t) } +func (b *NodeBuilderImpl) createCyclicStructurePlaceholder() *ast.TypeNode { + if b.ctx.flags&nodebuilder.FlagsAllowAnonymousIdentifier == 0 { + b.ctx.encounteredError = true + b.ctx.tracker.ReportCyclicStructureError() + } + return b.createElidedInformationPlaceholder() +} + func (b *NodeBuilderImpl) conditionalTypeToTypeNode(_t *Type) *ast.TypeNode { if b.checkTruncationLength() { return b.createElidedInformationPlaceholder() @@ -3069,6 +3089,16 @@ func (b *NodeBuilderImpl) getParentSymbolOfTypeParameter(typeParameter *TypePara func (b *NodeBuilderImpl) typeReferenceToTypeNode(t *Type) *ast.TypeNode { var typeArguments []*Type = b.ch.getTypeArguments(t) + if b.ch.isArrayOrTupleType(t) { + // Use the regular type reference to detect cycles through both deferred and regular + // type references when expanding arrays and tuples. + typeId := b.ch.createTypeReference(t.Target(), typeArguments).id + if b.ctx.visitedTypes.Has(typeId) { + return b.createCyclicStructurePlaceholder() + } + b.ctx.visitedTypes.Add(typeId) + defer b.ctx.visitedTypes.Delete(typeId) + } if t.Target() == b.ch.globalArrayType || t.Target() == b.ch.globalReadonlyArrayType { if b.ctx.flags&nodebuilder.FlagsWriteArrayAsGenericType != 0 { typeArgumentNode := b.typeToTypeNode(typeArguments[0]) @@ -3214,12 +3244,14 @@ func (b *NodeBuilderImpl) visitAndTransformType(t *Type, transform func(b *NodeB isConstructorObject := t.objectFlags&ObjectFlagsAnonymous != 0 && t.symbol != nil && t.symbol.Flags&ast.SymbolFlagsClass != 0 var id *CompositeSymbolIdentity switch { + case isDeferredMappedTypeReference(t): + id = &CompositeSymbolIdentity{false, getRecursionIdentity(t)} case t.objectFlags&ObjectFlagsReference != 0 && t.AsTypeReference().node != nil: - id = &CompositeSymbolIdentity{false, 0, ast.GetNodeId(t.AsTypeReference().node)} + id = &CompositeSymbolIdentity{false, asRecursionId(t.AsTypeReference().node)} case t.flags&TypeFlagsConditional != 0: - id = &CompositeSymbolIdentity{false, 0, ast.GetNodeId(t.AsConditionalType().root.node.AsNode())} + id = &CompositeSymbolIdentity{false, asRecursionId(t.AsConditionalType().root.node.AsNode())} case t.symbol != nil: - id = &CompositeSymbolIdentity{isConstructorObject, ast.GetSymbolId(t.symbol), 0} + id = &CompositeSymbolIdentity{isConstructorObject, asRecursionId(t.symbol)} default: id = nil } @@ -3245,10 +3277,30 @@ func (b *NodeBuilderImpl) visitAndTransformType(t *Type, transform func(b *NodeB } } + var mappedDeclaration *ast.Node + if isDeferredMappedTypeReference(t) { + mappedDeclaration = t.AsTypeReference().node + } else if t.objectFlags&ObjectFlagsReverseMapped != 0 { + mappedDeclaration = t.AsReverseMappedType().mappedType.AsMappedType().declaration.AsNode() + } + if mappedDeclaration != nil { + // Different type arguments can produce different recursion identities for the same mapped type. + // Also limit expansion by mapped type declaration. + origin := CompositeSymbolIdentity{false, asRecursionId(mappedDeclaration)} + depth := b.ctx.symbolDepth[origin] + if depth >= maxTypeInstantiationDepth { + b.ctx.truncating = true + return b.createElidedInformationPlaceholder() + } + b.ctx.symbolDepth[origin] = depth + 1 + defer func() { b.ctx.symbolDepth[origin] = depth }() + } + var depth int if id != nil { depth = b.ctx.symbolDepth[*id] if depth > 10 { + b.ctx.truncating = true return b.createElidedInformationPlaceholder() } b.ctx.symbolDepth[*id] = depth + 1 diff --git a/tsc/internal/checker/pseudotypenodebuilder.go b/tsc/internal/checker/pseudotypenodebuilder.go index 9daf4b686fc43..c1538fbca6dfe 100644 --- a/tsc/internal/checker/pseudotypenodebuilder.go +++ b/tsc/internal/checker/pseudotypenodebuilder.go @@ -41,6 +41,15 @@ func (b *NodeBuilderImpl) pseudoTypeToNodeWithCheckerFallback(t *pseudochecker.P return result } } + switch t.Kind { + case pseudochecker.PseudoTypeKindSingleCallSignature, pseudochecker.PseudoTypeKindObjectLiteral, pseudochecker.PseudoTypeKindTuple: + // Mark structural pseudotypes as visited before serializing them. + // Checker fallbacks must recognize recursive references to the type being emitted. + if !b.ctx.visitedTypes.Has(checkerType.id) { + b.ctx.visitedTypes.Add(checkerType.id) + defer b.ctx.visitedTypes.Delete(checkerType.id) + } + } return b.pseudoTypeToNode(t) } diff --git a/tsc/internal/checker/relater.go b/tsc/internal/checker/relater.go index 9d71d2504ca0c..d6a34faea2a6a 100644 --- a/tsc/internal/checker/relater.go +++ b/tsc/internal/checker/relater.go @@ -91,7 +91,7 @@ type RecursionId struct { } // This function exists to constrain the types of values that can be used as recursion IDs. -func asRecursionId[T *ast.Node | *ast.Symbol | *Type](value T) RecursionId { +func asRecursionId[T *ast.Node | *ast.Symbol | *Type | CacheHashKey](value T) RecursionId { return RecursionId{value: value} } @@ -758,8 +758,9 @@ func isExcessPropertyCheckTarget(t *Type) bool { // in `type Deep = { next: Deep> }`, repeatedly referencing the `next` property leads to an infinite // sequence of ever deeper instantiations with the same recursion identity (in this case the symbol associated with // the object type literal). -// A homomorphic mapped type is considered deeply nested if its target type is deeply nested, and an intersection is -// considered deeply nested if any constituent of the intersection is deeply nested. +// Homomorphic mapped object types use their target's recursion identity. Deferred type references to mapped arrays +// and tuples use the mapped type declaration and instantiated outer type parameters. An intersection is considered +// deeply nested if any constituent of the intersection is deeply nested. // It is possible, though highly unlikely, for the deeply nested check to be true in a situation where a chain of // instantiations is not infinitely expanding. Effectively, we will generate a false positive when two types are // structurally equal to at least maxDepth levels, but unequal at some level beyond that. @@ -838,6 +839,18 @@ func getRecursionIdentityTarget(t *Type) *Type { // identity of the type, meaning that every type is unique. Generally, types with constituents that could circularly // reference the type have a recursion identity that differs from the object identity. func getRecursionIdentityFromTarget(t *Type) RecursionId { + if isDeferredMappedTypeReference(t) { + // Include the mapped type declaration and instantiated outer type parameters in the recursion identity. + // Type arguments can share a recursion identity without being the same type. + c := t.checker + node := t.AsTypeReference().node + var key keyBuilder + key.writeNode(node) + for _, parameter := range c.typeNodeLinks.Get(node).outerTypeParameters { + key.writeType(c.instantiateType(parameter, t.Mapper())) + } + return asRecursionId(key.hash()) + } // Object and array literals are known not to contain recursive references and don't need a recursion identity. if t.flags&TypeFlagsObject != 0 && !isObjectOrArrayLiteralType(t) { if t.objectFlags&ObjectFlagsReference != 0 && t.AsTypeReference().node != nil { @@ -2647,9 +2660,9 @@ func (r *Relater) isRelatedToEx(originalSource *Type, originalTarget *Type, recu return TernaryFalse } // Normalize the source and target types: Turn fresh literal types into regular literal types, - // turn deferred type references into regular type references, simplify indexed access and - // conditional types, and resolve substitution types to either the substitution (on the source - // side) or the type variable (on the target side). + // turn deferred type references into regular type references (except those with a mapped type node), + // simplify indexed access and conditional types, and resolve substitution types to either the substitution + // (on the source side) or the type variable (on the target side). source := r.c.getNormalizedType(originalSource, false /*writing*/) target := r.c.getNormalizedType(originalTarget, true /*writing*/) if source == target { diff --git a/tsc/internal/checker/types.go b/tsc/internal/checker/types.go index f5a8a37954c85..819f8500abbfb 100644 --- a/tsc/internal/checker/types.go +++ b/tsc/internal/checker/types.go @@ -1005,7 +1005,7 @@ func (t *ObjectType) AsObjectType() *ObjectType { return t } type TypeReference struct { ObjectType - node *ast.Node // TypeReferenceNode | ArrayTypeNode | TupleTypeNode when deferred, else nil + node *ast.Node // TypeReferenceNode | ArrayTypeNode | TupleTypeNode | MappedTypeNode when deferred, else nil resolvedTypeArguments []*Type } diff --git a/tsc/internal/execute/tsctests/tsc_test.go b/tsc/internal/execute/tsctests/tsc_test.go index 24b664f8cc78d..7c568f0962b9f 100644 --- a/tsc/internal/execute/tsctests/tsc_test.go +++ b/tsc/internal/execute/tsctests/tsc_test.go @@ -1349,6 +1349,33 @@ func TestTscIgnoreConfig(t *testing.T) { func TestTscIncremental(t *testing.T) { t.Parallel() + libWithReadonlyArray := strings.Replace(tscDefaultLibContent, "interface ReadonlyArray {}", "interface ReadonlyArray { readonly length: number; readonly [n: number]: T; }", 1) + getRecursiveTypeTest := func(name string, source string) *tscInput { + return &tscInput{ + subScenario: name + " after comment only edit", + files: FileMap{ + "/home/src/workspaces/project/tsconfig.json": `{"compilerOptions": {"strict": true, "noEmit": true, "incremental": true}}`, + "/home/src/workspaces/project/repro.ts": stringtestutil.Dedent(source), + tscLibPath + "/lib.es2025.full.d.ts": libWithReadonlyArray, + }, + edits: []*tscEdit{ + { + caption: "add a comment", + edit: func(sys *TestSys) { + sys.appendFile("/home/src/workspaces/project/repro.ts", "\n// comment-only edit\n") + }, + }, + noChange, + { + caption: "add another comment", + edit: func(sys *TestSys) { + sys.appendFile("/home/src/workspaces/project/repro.ts", "\n// another comment\n") + }, + }, + noChange, + }, + } + } getConstEnumTest := func(bdsContents string, changeEnumFile string, testSuffix string) *tscInput { return &tscInput{ subScenario: "const enums" + testSuffix, @@ -2270,6 +2297,375 @@ func TestTscIncremental(t *testing.T) { }, commandLineArgs: []string{"--noEmit"}, }, + getRecursiveTypeTest("recursive mapped type", ` + type Json = string | Json[]; + type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; + declare function wrap(value: T): Parsed; + export const value = wrap({ items: [] as Json[] }); + `), + getRecursiveTypeTest("recursive readonly mapped type", ` + type Json = string | readonly Json[]; + type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; + declare function wrap(value: T): Parsed; + export const value = wrap({ items: [] as readonly Json[] }); + `), + { + subScenario: "recursive tagged tuple after incremental edits", + files: FileMap{ + "/home/src/workspaces/project/tsconfig.json": `{"compilerOptions": {"strict": true, "incremental": true, "noEmit": true, "module": "esnext", "moduleResolution": "bundler"}}`, + tscLibPath + "/lib.es2025.full.d.ts": libWithReadonlyArray, + "/home/src/workspaces/project/doc.ts": stringtestutil.Dedent(` + type Doc = + | string + | { [k: string]: Doc } + | readonly ["array", Doc] + | readonly ["array", Doc, { length: number }] + | readonly ["array", Doc, { min?: number; max?: number }] + | readonly ["union", Doc, ...Doc[]]; + export declare const doc: Doc; + `), + "/home/src/workspaces/project/consumer.ts": stringtestutil.Dedent(` + import { doc } from "./doc"; + export const value = doc; + `), + }, + edits: []*tscEdit{ + noChange, + { + caption: "add a comment to the recursive type", + edit: func(sys *TestSys) { + sys.appendFile("/home/src/workspaces/project/doc.ts", "\n// comment-only edit\n") + }, + }, + noChange, + { + caption: "add a union constituent", + edit: func(sys *TestSys) { + sys.replaceFileText("/home/src/workspaces/project/doc.ts", "| string", "| number\n | string") + }, + }, + noChange, + { + caption: "delete build info and check the edited source afresh", + edit: func(sys *TestSys) { + sys.removeNoError("/home/src/workspaces/project/tsconfig.tsbuildinfo") + }, + }, + { + caption: "verify the consumer type was not weakened", + edit: func(sys *TestSys) { + sys.appendFile("/home/src/workspaces/project/consumer.ts", "\nexport const invalid: number = value;\n") + }, + }, + noChange, + }, + }, + { + subScenario: "recursive mapped type consumer after comment only edit", + files: FileMap{ + "/home/src/workspaces/project/tsconfig.json": `{"compilerOptions": {"strict": true, "noEmit": true, "incremental": true}}`, + tscLibPath + "/lib.es2025.full.d.ts": libWithReadonlyArray, + "/home/src/workspaces/project/a.ts": stringtestutil.Dedent(` + type Json = string | Json[]; + type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; + declare function wrap(value: T): Parsed; + export const value = wrap({ items: [] as Json[] }); + `), + "/home/src/workspaces/project/b.ts": stringtestutil.Dedent(` + import { value } from "./a"; + export const n: number = value.items; + `), + }, + edits: []*tscEdit{ + { + caption: "add a comment to the producer", + edit: func(sys *TestSys) { + sys.appendFile("/home/src/workspaces/project/a.ts", "\n// comment-only edit\n") + }, + }, + noChange, + noChange, + { + caption: "delete build info and check the edited source afresh", + edit: func(sys *TestSys) { + sys.removeNoError("/home/src/workspaces/project/tsconfig.tsbuildinfo") + }, + }, + }, + }, + { + subScenario: "mapped type circular arguments across files", + files: FileMap{ + "/home/src/workspaces/project/tsconfig.json": `{"compilerOptions": {"strict": true, "noEmit": true, "incremental": true}}`, + "/home/src/workspaces/project/mapped.ts": `export type M = { [K in keyof T]: T extends M ? 1 : 2 };`, + "/home/src/workspaces/project/usage.ts": stringtestutil.Dedent(` + import type { M } from "./mapped.js"; + declare const array: M; + declare const tuple: M<[string]>; + export const a = array[0]; + export const b = tuple[0]; + `), + }, + edits: []*tscEdit{ + { + caption: "edit the use site", + edit: func(sys *TestSys) { + sys.appendFile("/home/src/workspaces/project/usage.ts", "\n// comment-only edit\n") + }, + }, + noChange, + { + caption: "edit the mapped declaration", + edit: func(sys *TestSys) { + sys.appendFile("/home/src/workspaces/project/mapped.ts", "\n// comment-only edit\n") + }, + }, + noChange, + }, + }, + { + subScenario: "recursive function declaration consumption", + files: FileMap{ + "/home/src/workspaces/project/producer/tsconfig.json": `{ + "compilerOptions": { "strict": true, "composite": true, "outDir": "dist" } + }`, + "/home/src/workspaces/project/producer/index.ts": stringtestutil.Dedent(` + export const arrow = () => arrow; + export const expression = function self() { return self; }; + export const first = () => second; + export const second = () => first; + export const generic = (value: T) => generic; + `), + "/home/src/workspaces/project/consumer/tsconfig.json": `{ + "compilerOptions": { "strict": true, "noEmit": true }, + "references": [{ "path": "../producer" }] + }`, + "/home/src/workspaces/project/consumer/index.ts": stringtestutil.Dedent(` + import { arrow, expression, first, generic } from "../producer/dist/index.js"; + const a: typeof arrow = arrow()()(); + const b: typeof expression = expression()()(); + const c: typeof first = first()()(); + const d: typeof generic = generic(1)("text")(true); + type IsAny = 0 extends (1 & T) ? true : false; + const result = arrow()()(); + const notAny: false = null as unknown as IsAny; + const invalid: number = arrow()()(); + const invalidExpression: number = expression()()(); + `), + }, + commandLineArgs: []string{"--build", "consumer"}, + edits: []*tscEdit{ + noChange, + { + caption: "add a comment to the producer", + edit: func(sys *TestSys) { + sys.appendFile("/home/src/workspaces/project/producer/index.ts", "\n// comment-only edit\n") + }, + }, + noChange, + }, + }, + { + subScenario: "reverse mapped declaration consumption", + files: FileMap{ + "/home/src/workspaces/project/producer/tsconfig.json": `{ + "compilerOptions": { "strict": true, "composite": true, "outDir": "dist" } + }`, + "/home/src/workspaces/project/producer/index.ts": stringtestutil.Dedent(` + declare function unwrap(input: { [K in keyof T]: { value: T[K] } }): T; + declare const indexedInput: { [key: string]: { value: string } }; + export const indexed = unwrap(indexedInput); + type Validator = ((input: unknown) => T | undefined) | { + [K in keyof T]: Validator; + }; + declare function decode(input: { [K in keyof T]: Validator }): T; + declare const stringValidator: (input: unknown) => string | undefined; + export const deep = decode({ a: { b: { c: { d: stringValidator } } } }); + interface NamedInput { leaf: typeof stringValidator } + declare const namedInput: { node: NamedInput }; + export const named = decode(namedInput); + `), + "/home/src/workspaces/project/consumer/tsconfig.json": `{ + "compilerOptions": { "strict": true, "noEmit": true }, + "references": [{ "path": "../producer" }] + }`, + "/home/src/workspaces/project/consumer/index.ts": stringtestutil.Dedent(` + import { indexed, deep, named } from "../producer/dist/index.js"; + const a: string = indexed["name"]; + const b: string = deep.a.b.c.d; + const c: string = named.node.leaf; + type IsAny = 0 extends (1 & T) ? true : false; + const notAny: false = null as unknown as + IsAny; + const invalidIndex: number = indexed["name"]; + const invalidDeep: number = deep.a.b.c.d; + const invalidNamed: number = named.node.leaf; + `), + }, + commandLineArgs: []string{"--build", "consumer"}, + edits: []*tscEdit{ + noChange, + { + caption: "add a comment to the producer", + edit: func(sys *TestSys) { + sys.appendFile("/home/src/workspaces/project/producer/index.ts", "\n// comment-only edit\n") + }, + }, + noChange, + }, + }, + { + subScenario: "recursive mapped declaration consumption", + files: FileMap{ + tscLibPath + "/lib.es2025.full.d.ts": libWithReadonlyArray, + "/home/src/workspaces/project/producer/tsconfig.json": `{ + "compilerOptions": { "strict": true, "composite": true, "outDir": "dist" }, + "files": ["index.ts", "private.ts"] + }`, + "/home/src/workspaces/project/producer/index.ts": stringtestutil.Dedent(` + type Json = string | Json[]; + type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; + declare function wrap(value: T): Parsed; + export const value = wrap({ items: [] as Json[] }); + + type Circular = { [P in keyof T]: Circular }; + declare const circular: Circular<[number, number]>; + export const tuple = circular; + + type Tuple = string | [Tuple]; + export const nested = wrap(null as unknown as [Tuple]); + + type Replace = T extends object ? { [K in keyof T]: Replace } : R; + declare function replace(value: T): Replace; + export const replaced = replace([] as Json[]); + `), + "/home/src/workspaces/project/producer/private.ts": stringtestutil.Dedent(` + export function local() { + type Circular = { [K in keyof T]: Circular }; + return null as unknown as Circular<[number]>; + } + export function anonymous() { + type Circular = T extends object ? { [K in keyof T]: Circular<[number]> } : T; + return null as unknown as Circular<[number]>; + } + `), + "/home/src/workspaces/project/consumer/tsconfig.json": `{ + "compilerOptions": { "strict": true, "noEmit": true }, + "references": [{ "path": "../producer" }] + }`, + "/home/src/workspaces/project/consumer/index.ts": stringtestutil.Dedent(` + import { value, tuple, nested, replaced } from "../producer/dist/index.js"; + value.items[0] = ["ok"]; + value.items[0] = 123; + if (typeof value.items[0] !== "string") { + value.items[0][0] = 123; + } + const number: number = tuple[0]; + tuple[0][0] = 123; + nested[0] = ["ok"]; + nested[0] = 123; + if (typeof nested[0] !== "string") { + nested[0][0] = 123; + } + replaced[0] = [123]; + replaced[0] = "error"; + if (typeof replaced[0] !== "number") { + replaced[0][0] = "error"; + } + `), + }, + commandLineArgs: []string{"--build", "consumer"}, + }, + { + subScenario: "recursive mapped array types", + files: FileMap{ + "/home/src/workspaces/project/tsconfig.json": `{"compilerOptions": {"strict": true, "declaration": true, "incremental": true}}`, + tscLibPath + "/lib.es2025.full.d.ts": libWithReadonlyArray, + "/home/src/workspaces/project/index.ts": stringtestutil.Dedent(` + type Json = string | Json[]; + type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; + declare function wrap(value: T): Parsed; + export const value = wrap({ items: [] as Json[] }); + const items: Json[] = value.items; + value.items[0] = ["ok"]; + value.items[0] = 123; + + type Mutable = { -readonly [K in keyof T]: Parsed }; + type Immutable = { readonly [K in keyof T]: Parsed }; + type Optional = { [K in keyof T]?: Parsed }; + type Required = { [K in keyof T]-?: Parsed }; + declare const mutable: Mutable; + declare const immutable: Immutable; + declare const optional: Optional; + declare const required: Required<(Json | undefined)[]>; + mutable[0] = ["ok"]; + immutable[0] = "error"; + optional[0] = undefined; + required[0] = undefined; + + function convert(value: T[]): Parsed { + return wrap(value); + } + const converted: Json[] = convert(["ok"]); + type Tuple = string | [Tuple]; + type ReadonlyTuple = string | readonly [ReadonlyTuple]; + type OptionalTuple = string | [OptionalTuple?]; + type RestTuple = string | [head: RestTuple, ...tail: RestTuple[]]; + type LeadingRestTuple = string | [...head: LeadingRestTuple[], tail: LeadingRestTuple]; + declare const tuple: Parsed<[Tuple]>; + declare const readonlyTuple: Parsed; + declare const optionalTuple: Parsed<[OptionalTuple?]>; + declare const restTuple: Parsed<[head: RestTuple, ...tail: RestTuple[]]>; + declare const leadingRestTuple: Parsed<[...head: LeadingRestTuple[], tail: LeadingRestTuple]>; + const tupleItem: Tuple = tuple[0]; + const optionalItem: OptionalTuple | undefined = optionalTuple[0]; + const restItem: RestTuple = restTuple[1]; + const leadingRestItem: LeadingRestTuple = leadingRestTuple[0]; + tuple[0] = ["ok"]; + tuple[0] = 123; + readonlyTuple[0] = "error"; + optionalTuple[0] = undefined; + optionalTuple[0] = 123; + restTuple[1] = 123; + leadingRestTuple[0] = 123; + + declare const optionalRest: Optional<[...items: Json[], last: Json]>; + const optionalRestItems: (Json | undefined)[] = optionalRest; + type DeepOptional = T extends object ? { [K in keyof T]?: DeepOptional } : T; + declare const deepOptionalRest: DeepOptional<[...items: LeadingRestTuple[], last: LeadingRestTuple]>; + const emptyOptionalRest: typeof deepOptionalRest = []; + deepOptionalRest[0] = undefined; + deepOptionalRest[0] = 123; + declare const requiredTuple: Required<[item?: Json]>; + requiredTuple[0] = undefined; + function convertTuple(value: [string, ...T]): Parsed<[string, ...T]> { + return wrap(value); + } + const convertedTuple: [string, [Tuple], number] = convertTuple(["ok", ["nested"] as [Tuple], 1]); + declare const variadicUnion: Parsed<[string, ...([Tuple] | [Tuple, Tuple])]>; + const mappedUnion: [string, Tuple] | [string, Tuple, Tuple] = variadicUnion; + declare const intersection: Parsed; + intersection[0] = 123; + type First = string | [Second]; + type Second = string | First[]; + declare const mutual: Parsed<[First, Second]>; + const mutualItems: [First, Second] = mutual; + mutual[0] = 123; + type Endless = T extends string ? Endless : never; + type NonTerminating = Endless; + `), + }, + edits: []*tscEdit{ + noChange, + { + caption: "add a comment", + edit: func(sys *TestSys) { + sys.appendFile("/home/src/workspaces/project/index.ts", "\n// comment-only edit\n") + }, + }, + noChange, + }, + }, { subScenario: "json module diagnostics are cleared after fixing the json file", files: FileMap{ @@ -2310,6 +2706,23 @@ func TestTscIncremental(t *testing.T) { }, } + for _, tuple := range []struct { + name string + text string + }{ + {"required", "[Json]"}, + {"readonly", "readonly [Json]"}, + {"optional", "[Json?]"}, + {"rest", "[head: Json, ...tail: Json[]]"}, + {"leading rest", "[...head: Json[], tail: Json]"}, + } { + testCases = append(testCases, getRecursiveTypeTest("recursive mapped tuple "+tuple.name, ` + type Json = string | `+tuple.text+`; + type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; + declare function wrap(value: T): Parsed; + export const value = wrap({ items: null as unknown as Json }); + `)) + } for _, test := range testCases { test.run(t, "incremental") } diff --git a/tsc/internal/fourslash/tests/recursiveFunctionQuickInfo_test.go b/tsc/internal/fourslash/tests/recursiveFunctionQuickInfo_test.go new file mode 100644 index 0000000000000..a548b9e9feca5 --- /dev/null +++ b/tsc/internal/fourslash/tests/recursiveFunctionQuickInfo_test.go @@ -0,0 +1,24 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/TypeScript/tsc/internal/fourslash" + "github.com/microsoft/TypeScript/tsc/internal/testutil" +) + +func TestRecursiveFunctionQuickInfo(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = ` +const arrow/*arrow*/ = () => arrow; +const broad: unknown = function self/*self*/() { return self; }; +arrow/*use*/()(); +` + f, done := fourslash.NewFourslash(t, nil, content) + defer done() + f.VerifyQuickInfoAt(t, "arrow", "const arrow: () => typeof arrow", "") + f.VerifyQuickInfoAt(t, "use", "const arrow: () => () => typeof arrow", "") + f.VerifyQuickInfoAt(t, "self", "function self(): () => typeof self", "") + f.VerifyNoErrors(t) +} diff --git a/tsc/internal/fourslash/tests/reverseMappedDeclarationQuickInfo_test.go b/tsc/internal/fourslash/tests/reverseMappedDeclarationQuickInfo_test.go new file mode 100644 index 0000000000000..b529a33263b2e --- /dev/null +++ b/tsc/internal/fourslash/tests/reverseMappedDeclarationQuickInfo_test.go @@ -0,0 +1,31 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/TypeScript/tsc/internal/fourslash" + "github.com/microsoft/TypeScript/tsc/internal/testutil" +) + +func TestReverseMappedDeclarationQuickInfo(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = ` +declare function unwrap(input: { [K in keyof T]: { value: T[K] } }): T; +declare const input: { [key: string]: { value: string } }; +const /*index*/indexed = unwrap(input); +indexed["name"].charAt/*member*/(0); + +type Validator = ((input: unknown) => T | undefined) | { + [K in keyof T]: Validator; +}; +declare function decode(input: { [K in keyof T]: Validator }): T; +declare const stringValidator: (input: unknown) => string | undefined; +const /*deep*/deep = decode({ a: { b: { c: { d: stringValidator } } } }); +deep.a.b.c./*leaf*/d; +` + f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content) + defer done() + f.VerifyNoErrors(t) + f.VerifyBaselineHover(t) +} diff --git a/tsc/testdata/baselines/reference/compiler/arrayFakeFlatNoCrashInferenceDeclarations.types b/tsc/testdata/baselines/reference/compiler/arrayFakeFlatNoCrashInferenceDeclarations.types index 85d6c698407c7..aa3a27b2ec541 100644 --- a/tsc/testdata/baselines/reference/compiler/arrayFakeFlatNoCrashInferenceDeclarations.types +++ b/tsc/testdata/baselines/reference/compiler/arrayFakeFlatNoCrashInferenceDeclarations.types @@ -9,7 +9,7 @@ type BadFlatArray = {obj: { >"done" : Arr "recur": Arr extends ReadonlyArray ->"recur" : Arr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: any; }[[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]]]]]]]]]]] extends infer T ? T extends [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]]]]]]]]]]] ? T extends -1 ? "done" : "recur" : never : never] : InnerArr; }[[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]]]]]]]]]] extends infer T_1 ? T_1 extends [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]]]]]]]]]] ? T_1 extends -1 ? "done" : "recur" : never : never] : InnerArr; }[[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]]]]]]]]] extends infer T_2 ? T_2 extends [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]]]]]]]]] ? T_2 extends -1 ? "done" : "recur" : never : never] : InnerArr; }[[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]]]]]]]] extends infer T_3 ? T_3 extends [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]]]]]]]] ? T_3 extends -1 ? "done" : "recur" : never : never] : InnerArr; }[[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]]]]]]] extends infer T_4 ? T_4 extends [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]]]]]]] ? T_4 extends -1 ? "done" : "recur" : never : never] : InnerArr; }[[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]]]]]] extends infer T_5 ? T_5 extends [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]]]]]] ? T_5 extends -1 ? "done" : "recur" : never : never] : InnerArr; }[[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]]]]] extends infer T_6 ? T_6 extends [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]]]]] ? T_6 extends -1 ? "done" : "recur" : never : never] : InnerArr; }[[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]]]] extends infer T_7 ? T_7 extends [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]]]] ? T_7 extends -1 ? "done" : "recur" : never : never] : InnerArr; }[[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]]] extends infer T_8 ? T_8 extends [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]]] ? T_8 extends -1 ? "done" : "recur" : never : never] : InnerArr; }[[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]] extends infer T_9 ? T_9 extends [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]] ? T_9 extends -1 ? "done" : "recur" : never : never] : InnerArr; }[[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth] extends infer T_10 ? T_10 extends [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth] ? T_10 extends -1 ? "done" : "recur" : never : never] : Arr +>"recur" : Arr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: InnerArr extends readonly (infer InnerArr)[] ? { done: InnerArr; recur: any; }[any] : InnerArr; }[any] : InnerArr; }[any] : InnerArr; }[any] : InnerArr; }[any] : InnerArr; }[any] : InnerArr; }[any] : InnerArr; }[any] : InnerArr; }[any] : InnerArr; }[any] : InnerArr; }[any] : Arr ? BadFlatArray >-1 : -1 diff --git a/tsc/testdata/baselines/reference/compiler/classExpressionInClassStaticDeclarations.errors.txt b/tsc/testdata/baselines/reference/compiler/classExpressionInClassStaticDeclarations.errors.txt new file mode 100644 index 0000000000000..7bbc4bf3ba43e --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/classExpressionInClassStaticDeclarations.errors.txt @@ -0,0 +1,9 @@ +classExpressionInClassStaticDeclarations.ts(2,12): error TS5088: The inferred type of 'D' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + + +==== classExpressionInClassStaticDeclarations.ts (1 errors) ==== + class C { + static D = class extends C {}; + ~ +!!! error TS5088: The inferred type of 'D' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/classExpressionInClassStaticDeclarations.js b/tsc/testdata/baselines/reference/compiler/classExpressionInClassStaticDeclarations.js index fabf7638fd32b..1bc442c3e455a 100644 --- a/tsc/testdata/baselines/reference/compiler/classExpressionInClassStaticDeclarations.js +++ b/tsc/testdata/baselines/reference/compiler/classExpressionInClassStaticDeclarations.js @@ -11,12 +11,3 @@ class C { } C.D = class extends C { }; - - -//// [classExpressionInClassStaticDeclarations.d.ts] -declare class C { - static D: { - new (): {}; - D: /*elided*/ any; - }; -} diff --git a/tsc/testdata/baselines/reference/compiler/declFileTypeofFunction.js b/tsc/testdata/baselines/reference/compiler/declFileTypeofFunction.js index 6a0c032be1d71..a0df5bd599f67 100644 --- a/tsc/testdata/baselines/reference/compiler/declFileTypeofFunction.js +++ b/tsc/testdata/baselines/reference/compiler/declFileTypeofFunction.js @@ -71,6 +71,6 @@ declare function b1(): typeof b1; declare function foo(): typeof foo; declare var foo1: typeof foo; declare var foo2: typeof foo; -declare var foo3: () => () => /*elided*/ any; -declare var x: () => () => /*elided*/ any; +declare var foo3: () => typeof foo3; +declare var x: () => typeof x; declare function foo5(x: number): (x: number) => number; diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitInferredTypeAlias4.errors.txt b/tsc/testdata/baselines/reference/compiler/declarationEmitInferredTypeAlias4.errors.txt index beed1cd04564c..f4858319ecf28 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitInferredTypeAlias4.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitInferredTypeAlias4.errors.txt @@ -1,8 +1,11 @@ +declarationEmitInferredTypeAlias4.ts(1,10): error TS5088: The inferred type of 'f' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. declarationEmitInferredTypeAlias4.ts(4,12): error TS2454: Variable 'x' is used before being assigned. -==== declarationEmitInferredTypeAlias4.ts (1 errors) ==== +==== declarationEmitInferredTypeAlias4.ts (2 errors) ==== function f() { + ~ +!!! error TS5088: The inferred type of 'f' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. type Foo = T | { x: Foo }; var x: Foo; return x; diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitInferredTypeAlias4.js b/tsc/testdata/baselines/reference/compiler/declarationEmitInferredTypeAlias4.js index fba79dc0aa8b5..00652e1bd00da 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitInferredTypeAlias4.js +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitInferredTypeAlias4.js @@ -13,9 +13,3 @@ function f() { var x; return x; } - - -//// [declarationEmitInferredTypeAlias4.d.ts] -declare function f(): A[] | { - x: A[] | /*elided*/ any; -}; diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.types b/tsc/testdata/baselines/reference/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.types index 162bc764704fe..5f4e0426550bf 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.types +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.types @@ -89,7 +89,7 @@ export type entryOf = evaluate< > export type entriesOf = evaluate[]> ->entriesOf : ({ [k in keyof o]-?: [k, o[k] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: T[k]; } : never)[] +>entriesOf : entriesOf export const entriesOf = (o: o) => >entriesOf : (o: o) => entriesOf @@ -97,7 +97,7 @@ export const entriesOf = (o: o) => >o : o Object.entries(o) as entriesOf ->Object.entries(o) as entriesOf : ({ [k in keyof o]-?: [k, o[k] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: T[k]; } : never)[] +>Object.entries(o) as entriesOf : entriesOf >Object.entries(o) : [string, any][] >Object.entries : { (o: { [s: string]: T; } | ArrayLike): [string, T][]; (o: {}): [string, any][]; } >Object : ObjectConstructor diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitStaticMethodNonIdentifierNames.errors.txt b/tsc/testdata/baselines/reference/compiler/declarationEmitStaticMethodNonIdentifierNames.errors.txt new file mode 100644 index 0000000000000..567eef6a3269f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitStaticMethodNonIdentifierNames.errors.txt @@ -0,0 +1,74 @@ +declarationEmitStaticMethodNonIdentifierNames.ts(56,12): error TS5088: The inferred type of 'getRec' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + + +==== declarationEmitStaticMethodNonIdentifierNames.ts (1 errors) ==== + declare const uniqueSym: unique symbol; + + // none of these names can be written as `typeof Foo.` + export class Foo { + static #priv() { } + static getPriv() { + return Foo.#priv; + } + + static "quoted-name"() { } + static getQuoted() { + return Foo["quoted-name"]; + } + + static ["computed-name"]() { } + static getComputed() { + return Foo["computed-name"]; + } + + static 1() { } + static getNumeric() { + return Foo[1]; + } + + static [uniqueSym]() { } + static getUnique() { + return Foo[uniqueSym]; + } + + // property types go through the same path + static privRef = Foo.#priv; + } + + // identifier names still use `typeof` + export class Writable { + static normalName() { } + static getNormal() { + return Writable.normalName; + } + + static $dollar() { } + static getDollar() { + return Writable.$dollar; + } + } + + export class Generic { + static #priv(x: T): T { return x; } + static getPriv() { + return Generic.#priv; + } + } + + export class Recursive { + static #rec() { return Recursive.#rec; } + static getRec() { + ~~~~~~ +!!! error TS5088: The inferred type of 'getRec' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + return Recursive.#rec; + } + } + + // instance members already fall back to a structural type + export class Instance { + #priv() { } + getPriv() { + return this.#priv; + } + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitStaticMethodNonIdentifierNames.js b/tsc/testdata/baselines/reference/compiler/declarationEmitStaticMethodNonIdentifierNames.js index 8eddf980c03a8..22995a34b56a3 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitStaticMethodNonIdentifierNames.js +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitStaticMethodNonIdentifierNames.js @@ -126,39 +126,3 @@ export class Instance { return this.#priv; } } - - -//// [declarationEmitStaticMethodNonIdentifierNames.d.ts] -declare const uniqueSym: unique symbol; -export declare class Foo { - #private; - static getPriv(): () => void; - static "quoted-name"(): void; - static getQuoted(): () => void; - static ["computed-name"](): void; - static getComputed(): () => void; - static 1(): void; - static getNumeric(): () => void; - static [uniqueSym](): void; - static getUnique(): () => void; - static privRef: () => void; -} -export declare class Writable { - static normalName(): void; - static getNormal(): typeof Writable.normalName; - static $dollar(): void; - static getDollar(): typeof Writable.$dollar; -} -export declare class Generic { - #private; - static getPriv(): (x: T) => T; -} -export declare class Recursive { - #private; - static getRec(): () => /*elided*/ any; -} -export declare class Instance { - #private; - getPriv(): () => void; -} -export {}; diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.errors.txt b/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.errors.txt new file mode 100644 index 0000000000000..befe74a90fcbd --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.errors.txt @@ -0,0 +1,54 @@ +growing.ts(1,17): error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. +local.ts(1,17): error TS5088: The inferred type of 'localArrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +local.ts(5,17): error TS5088: The inferred type of 'localDeclaration' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +local.ts(9,17): error TS5088: The inferred type of 'localInstantiation' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +local.ts(13,14): error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + + +==== local.ts (4 errors) ==== + export function localArrow() { + ~~~~~~~~~~ +!!! error TS5088: The inferred type of 'localArrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + const inner = () => inner; + return inner; + } + export function localDeclaration() { + ~~~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'localDeclaration' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + function inner() { return inner; } + return inner; + } + export function localInstantiation() { + ~~~~~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'localInstantiation' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + function inner(): typeof inner { return inner; } + return inner; + } + export const object = { + ~~~~~~ +!!! error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + self() { return object; } + }; + export const annotatedObject: { self(): typeof annotatedObject } = { + self() { return annotatedObject; } + }; + +==== growing.ts (1 errors) ==== + export function grow(value: T) { + ~~~~ +!!! error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. + return { + value, + deeper: (next: U) => grow({ ...value, ...next }), + }; + } + +==== annotatedLocal.ts (0 errors) ==== + interface Recursive { + (): Recursive; + } + export function local(): Recursive { + const inner = () => inner; + return inner; + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.js b/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.js new file mode 100644 index 0000000000000..459a409101941 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.js @@ -0,0 +1,79 @@ +//// [tests/cases/compiler/declarationEmitUnserializableTypes.ts] //// + +//// [local.ts] +export function localArrow() { + const inner = () => inner; + return inner; +} +export function localDeclaration() { + function inner() { return inner; } + return inner; +} +export function localInstantiation() { + function inner(): typeof inner { return inner; } + return inner; +} +export const object = { + self() { return object; } +}; +export const annotatedObject: { self(): typeof annotatedObject } = { + self() { return annotatedObject; } +}; + +//// [growing.ts] +export function grow(value: T) { + return { + value, + deeper: (next: U) => grow({ ...value, ...next }), + }; +} + +//// [annotatedLocal.ts] +interface Recursive { + (): Recursive; +} +export function local(): Recursive { + const inner = () => inner; + return inner; +} + + +//// [local.js] +export function localArrow() { + const inner = () => inner; + return inner; +} +export function localDeclaration() { + function inner() { return inner; } + return inner; +} +export function localInstantiation() { + function inner() { return inner; } + return inner; +} +export const object = { + self() { return object; } +}; +export const annotatedObject = { + self() { return annotatedObject; } +}; +//// [growing.js] +export function grow(value) { + return { + value, + deeper: (next) => grow({ ...value, ...next }), + }; +} +//// [annotatedLocal.js] +export function local() { + const inner = () => inner; + return inner; +} + + +//// [annotatedLocal.d.ts] +interface Recursive { + (): Recursive; +} +export declare function local(): Recursive; +export {}; diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.symbols b/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.symbols new file mode 100644 index 0000000000000..c6dd879aa9a84 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.symbols @@ -0,0 +1,100 @@ +//// [tests/cases/compiler/declarationEmitUnserializableTypes.ts] //// + +=== local.ts === +export function localArrow() { +>localArrow : Symbol(localArrow, Decl(local.ts, 0, 0)) + + const inner = () => inner; +>inner : Symbol(inner, Decl(local.ts, 1, 9)) +>inner : Symbol(inner, Decl(local.ts, 1, 9)) + + return inner; +>inner : Symbol(inner, Decl(local.ts, 1, 9)) +} +export function localDeclaration() { +>localDeclaration : Symbol(localDeclaration, Decl(local.ts, 3, 1)) + + function inner() { return inner; } +>inner : Symbol(inner, Decl(local.ts, 4, 36)) +>inner : Symbol(inner, Decl(local.ts, 4, 36)) + + return inner; +>inner : Symbol(inner, Decl(local.ts, 4, 36)) +} +export function localInstantiation() { +>localInstantiation : Symbol(localInstantiation, Decl(local.ts, 7, 1)) + + function inner(): typeof inner { return inner; } +>inner : Symbol(inner, Decl(local.ts, 8, 38)) +>T : Symbol(T, Decl(local.ts, 9, 19)) +>inner : Symbol(inner, Decl(local.ts, 8, 38)) +>T : Symbol(T, Decl(local.ts, 9, 19)) +>inner : Symbol(inner, Decl(local.ts, 8, 38)) +>T : Symbol(T, Decl(local.ts, 9, 19)) + + return inner; +>inner : Symbol(inner, Decl(local.ts, 8, 38)) +} +export const object = { +>object : Symbol(object, Decl(local.ts, 12, 12)) + + self() { return object; } +>self : Symbol(self, Decl(local.ts, 12, 23)) +>object : Symbol(object, Decl(local.ts, 12, 12)) + +}; +export const annotatedObject: { self(): typeof annotatedObject } = { +>annotatedObject : Symbol(annotatedObject, Decl(local.ts, 15, 12)) +>self : Symbol(self, Decl(local.ts, 15, 31)) +>annotatedObject : Symbol(annotatedObject, Decl(local.ts, 15, 12)) + + self() { return annotatedObject; } +>self : Symbol(self, Decl(local.ts, 15, 68)) +>annotatedObject : Symbol(annotatedObject, Decl(local.ts, 15, 12)) + +}; + +=== growing.ts === +export function grow(value: T) { +>grow : Symbol(grow, Decl(growing.ts, 0, 0)) +>T : Symbol(T, Decl(growing.ts, 0, 21)) +>value : Symbol(value, Decl(growing.ts, 0, 39)) +>T : Symbol(T, Decl(growing.ts, 0, 21)) + + return { + value, +>value : Symbol(value, Decl(growing.ts, 1, 12)) + + deeper: (next: U) => grow({ ...value, ...next }), +>deeper : Symbol(deeper, Decl(growing.ts, 2, 14)) +>U : Symbol(U, Decl(growing.ts, 3, 17)) +>next : Symbol(next, Decl(growing.ts, 3, 35)) +>U : Symbol(U, Decl(growing.ts, 3, 17)) +>grow : Symbol(grow, Decl(growing.ts, 0, 0)) +>T : Symbol(T, Decl(growing.ts, 0, 21)) +>U : Symbol(U, Decl(growing.ts, 3, 17)) +>value : Symbol(value, Decl(growing.ts, 0, 39)) +>next : Symbol(next, Decl(growing.ts, 3, 35)) + + }; +} + +=== annotatedLocal.ts === +interface Recursive { +>Recursive : Symbol(Recursive, Decl(annotatedLocal.ts, 0, 0)) + + (): Recursive; +>Recursive : Symbol(Recursive, Decl(annotatedLocal.ts, 0, 0)) +} +export function local(): Recursive { +>local : Symbol(local, Decl(annotatedLocal.ts, 2, 1)) +>Recursive : Symbol(Recursive, Decl(annotatedLocal.ts, 0, 0)) + + const inner = () => inner; +>inner : Symbol(inner, Decl(annotatedLocal.ts, 4, 9)) +>inner : Symbol(inner, Decl(annotatedLocal.ts, 4, 9)) + + return inner; +>inner : Symbol(inner, Decl(annotatedLocal.ts, 4, 9)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.types b/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.types new file mode 100644 index 0000000000000..493ce079f72b2 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.types @@ -0,0 +1,98 @@ +//// [tests/cases/compiler/declarationEmitUnserializableTypes.ts] //// + +=== local.ts === +export function localArrow() { +>localArrow : () => () => any + + const inner = () => inner; +>inner : () => any +>() => inner : () => any +>inner : () => any + + return inner; +>inner : () => any +} +export function localDeclaration() { +>localDeclaration : () => () => any + + function inner() { return inner; } +>inner : () => any +>inner : () => any + + return inner; +>inner : () => any +} +export function localInstantiation() { +>localInstantiation : () => () => () => any + + function inner(): typeof inner { return inner; } +>inner : () => any +>inner : () => any +>inner : () => any +>inner : () => any + + return inner; +>inner : () => () => any +>inner : () => any +} +export const object = { +>object : { self(): any; } +>{ self() { return object; }} : { self(): { self(): any; }; } + + self() { return object; } +>self : () => { self(): any; } +>object : { self(): any; } + +}; +export const annotatedObject: { self(): typeof annotatedObject } = { +>annotatedObject : { self(): typeof annotatedObject; } +>self : () => typeof annotatedObject +>annotatedObject : { self(): typeof annotatedObject; } +>{ self() { return annotatedObject; }} : { self(): { self(): typeof annotatedObject; }; } + + self() { return annotatedObject; } +>self : () => { self(): typeof annotatedObject; } +>annotatedObject : { self(): typeof annotatedObject; } + +}; + +=== growing.ts === +export function grow(value: T) { +>grow : (value: T) => { value: T; deeper: (next: U) => { value: T & U; deeper: (next: U_1) => { value: T & U & U_1; deeper: (next: U_2) => { value: T & U & U_1 & U_2; deeper: (next: U_3) => { value: T & U & U_1 & U_2 & U_3; deeper: (next: U_4) => { value: T & U & U_1 & U_2 & U_3 & U_4; deeper: (next: U_5) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5; deeper: (next: U_6) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6; deeper: (next: U_7) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6 & U_7; deeper: (next: U_8) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6 & U_7 & U_8; deeper: (next: U_9) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6 & U_7 & U_8 & U_9; deeper: (next: U_10) => any; }; }; }; }; }; }; }; }; }; }; } +>value : T + + return { +>{ value, deeper: (next: U) => grow({ ...value, ...next }), } : { value: T; deeper: (next: U) => { value: T & U; deeper: (next: U_1) => { value: T & U & U_1; deeper: (next: U_2) => { value: T & U & U_1 & U_2; deeper: (next: U_3) => { value: T & U & U_1 & U_2 & U_3; deeper: (next: U_4) => { value: T & U & U_1 & U_2 & U_3 & U_4; deeper: (next: U_5) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5; deeper: (next: U_6) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6; deeper: (next: U_7) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6 & U_7; deeper: (next: U_8) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6 & U_7 & U_8; deeper: (next: U_9) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6 & U_7 & U_8 & U_9; deeper: (next: U_10) => any; }; }; }; }; }; }; }; }; }; }; } + + value, +>value : T + + deeper: (next: U) => grow({ ...value, ...next }), +>deeper : (next: U) => { value: T & U; deeper: (next: U_1) => any; } +>(next: U) => grow({ ...value, ...next }) : (next: U) => { value: T & U; deeper: (next: U_1) => any; } +>next : U +>grow({ ...value, ...next }) : { value: T & U; deeper: (next: U_1) => { value: T & U & U_1; deeper: (next: U_2) => { value: T & U & U_1 & U_2; deeper: (next: U_3) => { value: T & U & U_1 & U_2 & U_3; deeper: (next: U_4) => { value: T & U & U_1 & U_2 & U_3 & U_4; deeper: (next: U_5) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5; deeper: (next: U_6) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6; deeper: (next: U_7) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6 & U_7; deeper: (next: U_8) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6 & U_7 & U_8; deeper: (next: U_9) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6 & U_7 & U_8 & U_9; deeper: (next: U_10) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6 & U_7 & U_8 & U_9 & U_10; deeper: (next: U_11) => any; }; }; }; }; }; }; }; }; }; }; } +>grow : (value: T) => { value: T; deeper: (next: U) => { value: T & U; deeper: (next: U_1) => { value: T & U & U_1; deeper: (next: U_2) => { value: T & U & U_1 & U_2; deeper: (next: U_3) => { value: T & U & U_1 & U_2 & U_3; deeper: (next: U_4) => { value: T & U & U_1 & U_2 & U_3 & U_4; deeper: (next: U_5) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5; deeper: (next: U_6) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6; deeper: (next: U_7) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6 & U_7; deeper: (next: U_8) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6 & U_7 & U_8; deeper: (next: U_9) => { value: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6 & U_7 & U_8 & U_9; deeper: (next: U_10) => any; }; }; }; }; }; }; }; }; }; }; } +>{ ...value, ...next } : T & U +>value : T +>next : U + + }; +} + +=== annotatedLocal.ts === +interface Recursive { + (): Recursive; +} +export function local(): Recursive { +>local : () => Recursive + + const inner = () => inner; +>inner : () => any +>() => inner : () => any +>inner : () => any + + return inner; +>inner : () => any +} + diff --git a/tsc/testdata/baselines/reference/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.errors.txt b/tsc/testdata/baselines/reference/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.errors.txt new file mode 100644 index 0000000000000..7f8f189962df8 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.errors.txt @@ -0,0 +1,49 @@ +declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.ts(7,14): error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. +declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.ts(22,14): error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. + + +==== declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.ts (2 errors) ==== + // Both return types exceed the serializer's nesting limit. Declaration emit must report an error + // rather than silently replacing the remaining type with `any`. + + // Slightly simplified repro from https://github.com/microsoft/TypeScript/issues/30732 so it's easier to read and debug + export type Key = keyof U; + export type Value, U> = U[K]; + export const updateIfChanged = (t: T) => { + ~~~~~~~~~~~~~~~ +!!! error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. + const reduce = (u: U, update: (u: U) => T) => { + const set = (newU: U) => Object.is(u, newU) ? t : update(newU); + return Object.assign( + >(key: K) => + reduce>(u[key as keyof U] as Value, (v: Value) => { + return update(Object.assign(Array.isArray(u) ? [] : {}, u, { [key]: v })); + }), + { map: (updater: (u: U) => U) => set(updater(u)), set }); + }; + return reduce(t, (t: T) => t); + }; + + // example from https://github.com/microsoft/TypeScript/issues/31605 + + export const testRecFun = (parent: T) => { + ~~~~~~~~~~ +!!! error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. + return { + result: parent, + deeper: (child: U) => + testRecFun({ ...parent, ...child }) + }; + } + + + let p1 = testRecFun({ one: '1' }) + void p1.result.one; + let p2 = p1.deeper({ two: '2' }) + void p2.result.one; + void p2.result.two; + let p3 = p2.deeper({ three: '3' }) + void p3.result.one; + void p3.result.two; + void p3.result.three; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.js b/tsc/testdata/baselines/reference/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.js index d0cb50966ad51..ca2968d99f78a 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.js +++ b/tsc/testdata/baselines/reference/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.js @@ -1,8 +1,8 @@ //// [tests/cases/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.ts] //// //// [declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.ts] -// Note that both of the following have an `any` in their return type from where we bottom out the type printout -// for having too many instances of the same symbol nesting. +// Both return types exceed the serializer's nesting limit. Declaration emit must report an error +// rather than silently replacing the remaining type with `any`. // Slightly simplified repro from https://github.com/microsoft/TypeScript/issues/30732 so it's easier to read and debug export type Key = keyof U; @@ -44,8 +44,8 @@ void p3.result.three; //// [declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.js] "use strict"; -// Note that both of the following have an `any` in their return type from where we bottom out the type printout -// for having too many instances of the same symbol nesting. +// Both return types exceed the serializer's nesting limit. Declaration emit must report an error +// rather than silently replacing the remaining type with `any`. Object.defineProperty(exports, "__esModule", { value: true }); exports.testRecFun = exports.updateIfChanged = void 0; const updateIfChanged = (t) => { @@ -75,82 +75,3 @@ let p3 = p2.deeper({ three: '3' }); void p3.result.one; void p3.result.two; void p3.result.three; - - -//// [declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.d.ts] -export type Key = keyof U; -export type Value, U> = U[K]; -export declare const updateIfChanged: (t: T) => (>(key: K) => (>>(key: K_1) => (>>>(key: K_2) => (>>>>(key: K_3) => (>>>>>(key: K_4) => (>>>>>>(key: K_5) => (>>>>>>>(key: K_6) => (>>>>>>>>(key: K_7) => (>>>>>>>>>(key: K_8) => (>>>>>>>>>>(key: K_9) => (>>>>>>>>>>>(key: K_10) => /*elided*/ any & { - map: (updater: (u: Value>>>>>>>>>>) => Value>>>>>>>>>>) => T; - set: (newU: Value>>>>>>>>>>) => T; -}) & { - map: (updater: (u: Value>>>>>>>>>) => Value>>>>>>>>>) => T; - set: (newU: Value>>>>>>>>>) => T; -}) & { - map: (updater: (u: Value>>>>>>>>) => Value>>>>>>>>) => T; - set: (newU: Value>>>>>>>>) => T; -}) & { - map: (updater: (u: Value>>>>>>>) => Value>>>>>>>) => T; - set: (newU: Value>>>>>>>) => T; -}) & { - map: (updater: (u: Value>>>>>>) => Value>>>>>>) => T; - set: (newU: Value>>>>>>) => T; -}) & { - map: (updater: (u: Value>>>>>) => Value>>>>>) => T; - set: (newU: Value>>>>>) => T; -}) & { - map: (updater: (u: Value>>>>) => Value>>>>) => T; - set: (newU: Value>>>>) => T; -}) & { - map: (updater: (u: Value>>>) => Value>>>) => T; - set: (newU: Value>>>) => T; -}) & { - map: (updater: (u: Value>>) => Value>>) => T; - set: (newU: Value>>) => T; -}) & { - map: (updater: (u: Value>) => Value>) => T; - set: (newU: Value>) => T; -}) & { - map: (updater: (u: Value) => Value) => T; - set: (newU: Value) => T; -}) & { - map: (updater: (u: T) => T) => T; - set: (newU: T) => T; -}; -export declare const testRecFun: (parent: T) => { - result: T; - deeper: (child: U) => { - result: T & U; - deeper: (child: U_1) => { - result: T & U & U_1; - deeper: (child: U_2) => { - result: T & U & U_1 & U_2; - deeper: (child: U_3) => { - result: T & U & U_1 & U_2 & U_3; - deeper: (child: U_4) => { - result: T & U & U_1 & U_2 & U_3 & U_4; - deeper: (child: U_5) => { - result: T & U & U_1 & U_2 & U_3 & U_4 & U_5; - deeper: (child: U_6) => { - result: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6; - deeper: (child: U_7) => { - result: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6 & U_7; - deeper: (child: U_8) => { - result: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6 & U_7 & U_8; - deeper: (child: U_9) => { - result: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6 & U_7 & U_8 & U_9; - deeper: (child: U_10) => { - result: T & U & U_1 & U_2 & U_3 & U_4 & U_5 & U_6 & U_7 & U_8 & U_9 & U_10; - deeper: (child: U_11) => /*elided*/ any; - }; - }; - }; - }; - }; - }; - }; - }; - }; - }; - }; -}; diff --git a/tsc/testdata/baselines/reference/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.symbols b/tsc/testdata/baselines/reference/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.symbols index 75532047fccd6..9f7e757cc2fbc 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.symbols +++ b/tsc/testdata/baselines/reference/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.symbols @@ -1,8 +1,8 @@ //// [tests/cases/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.ts] //// === declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.ts === -// Note that both of the following have an `any` in their return type from where we bottom out the type printout -// for having too many instances of the same symbol nesting. +// Both return types exceed the serializer's nesting limit. Declaration emit must report an error +// rather than silently replacing the remaining type with `any`. // Slightly simplified repro from https://github.com/microsoft/TypeScript/issues/30732 so it's easier to read and debug export type Key = keyof U; diff --git a/tsc/testdata/baselines/reference/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.types b/tsc/testdata/baselines/reference/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.types index cb976db5fbaff..7f2a2be45949c 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.types +++ b/tsc/testdata/baselines/reference/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.types @@ -1,8 +1,8 @@ //// [tests/cases/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.ts] //// === declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.ts === -// Note that both of the following have an `any` in their return type from where we bottom out the type printout -// for having too many instances of the same symbol nesting. +// Both return types exceed the serializer's nesting limit. Declaration emit must report an error +// rather than silently replacing the remaining type with `any`. // Slightly simplified repro from https://github.com/microsoft/TypeScript/issues/30732 so it's easier to read and debug export type Key = keyof U; @@ -12,8 +12,8 @@ export type Value, U> = U[K]; >Value : Value export const updateIfChanged = (t: T) => { ->updateIfChanged : (t: T) => (>(key: K) => (>>(key: K_1) => (>>>(key: K_2) => (>>>>(key: K_3) => (>>>>>(key: K_4) => (>>>>>>(key: K_5) => (>>>>>>>(key: K_6) => (>>>>>>>>(key: K_7) => (>>>>>>>>>(key: K_8) => (>>>>>>>>>>(key: K_9) => (>>>>>>>>>>>(key: K_10) => any & { map: (updater: (u: Value>>>>>>>>>>) => Value>>>>>>>>>>) => T; set: (newU: Value>>>>>>>>>>) => T; }) & { map: (updater: (u: Value>>>>>>>>>) => Value>>>>>>>>>) => T; set: (newU: Value>>>>>>>>>) => T; }) & { map: (updater: (u: Value>>>>>>>>) => Value>>>>>>>>) => T; set: (newU: Value>>>>>>>>) => T; }) & { map: (updater: (u: Value>>>>>>>) => Value>>>>>>>) => T; set: (newU: Value>>>>>>>) => T; }) & { map: (updater: (u: Value>>>>>>) => Value>>>>>>) => T; set: (newU: Value>>>>>>) => T; }) & { map: (updater: (u: Value>>>>>) => Value>>>>>) => T; set: (newU: Value>>>>>) => T; }) & { map: (updater: (u: Value>>>>) => Value>>>>) => T; set: (newU: Value>>>>) => T; }) & { map: (updater: (u: Value>>>) => Value>>>) => T; set: (newU: Value>>>) => T; }) & { map: (updater: (u: Value>>) => Value>>) => T; set: (newU: Value>>) => T; }) & { map: (updater: (u: Value>) => Value>) => T; set: (newU: Value>) => T; }) & { map: (updater: (u: Value) => Value) => T; set: (newU: Value) => T; }) & { map: (updater: (u: T) => T) => T; set: (newU: T) => T; } ->(t: T) => { const reduce = (u: U, update: (u: U) => T) => { const set = (newU: U) => Object.is(u, newU) ? t : update(newU); return Object.assign( >(key: K) => reduce>(u[key as keyof U] as Value, (v: Value) => { return update(Object.assign(Array.isArray(u) ? [] : {}, u, { [key]: v })); }), { map: (updater: (u: U) => U) => set(updater(u)), set }); }; return reduce(t, (t: T) => t);} : (t: T) => (>(key: K) => (>>(key: K_1) => (>>>(key: K_2) => (>>>>(key: K_3) => (>>>>>(key: K_4) => (>>>>>>(key: K_5) => (>>>>>>>(key: K_6) => (>>>>>>>>(key: K_7) => (>>>>>>>>>(key: K_8) => (>>>>>>>>>>(key: K_9) => (>>>>>>>>>>>(key: K_10) => any & { map: (updater: (u: Value>>>>>>>>>>) => Value>>>>>>>>>>) => T; set: (newU: Value>>>>>>>>>>) => T; }) & { map: (updater: (u: Value>>>>>>>>>) => Value>>>>>>>>>) => T; set: (newU: Value>>>>>>>>>) => T; }) & { map: (updater: (u: Value>>>>>>>>) => Value>>>>>>>>) => T; set: (newU: Value>>>>>>>>) => T; }) & { map: (updater: (u: Value>>>>>>>) => Value>>>>>>>) => T; set: (newU: Value>>>>>>>) => T; }) & { map: (updater: (u: Value>>>>>>) => Value>>>>>>) => T; set: (newU: Value>>>>>>) => T; }) & { map: (updater: (u: Value>>>>>) => Value>>>>>) => T; set: (newU: Value>>>>>) => T; }) & { map: (updater: (u: Value>>>>) => Value>>>>) => T; set: (newU: Value>>>>) => T; }) & { map: (updater: (u: Value>>>) => Value>>>) => T; set: (newU: Value>>>) => T; }) & { map: (updater: (u: Value>>) => Value>>) => T; set: (newU: Value>>) => T; }) & { map: (updater: (u: Value>) => Value>) => T; set: (newU: Value>) => T; }) & { map: (updater: (u: Value) => Value) => T; set: (newU: Value) => T; }) & { map: (updater: (u: T) => T) => T; set: (newU: T) => T; } +>updateIfChanged : (t: T) => (>(key: K) => (>>(key: K_1) => (>>>(key: K_2) => (>>>>(key: K_3) => (>>>>>(key: K_4) => (>>>>>>(key: K_5) => (>>>>>>>(key: K_6) => (>>>>>>>>(key: K_7) => (>>>>>>>>>(key: K_8) => (>>>>>>>>>>(key: K_9) => (>>>>>>>>>>>(key: K_10) => any & { }) & { }) & { }) & { }) & { }) & { }) & { }) & { }) & { }) & { }) & { }) & { } +>(t: T) => { const reduce = (u: U, update: (u: U) => T) => { const set = (newU: U) => Object.is(u, newU) ? t : update(newU); return Object.assign( >(key: K) => reduce>(u[key as keyof U] as Value, (v: Value) => { return update(Object.assign(Array.isArray(u) ? [] : {}, u, { [key]: v })); }), { map: (updater: (u: U) => U) => set(updater(u)), set }); }; return reduce(t, (t: T) => t);} : (t: T) => (>(key: K) => (>>(key: K_1) => (>>>(key: K_2) => (>>>>(key: K_3) => (>>>>>(key: K_4) => (>>>>>>(key: K_5) => (>>>>>>>(key: K_6) => (>>>>>>>>(key: K_7) => (>>>>>>>>>(key: K_8) => (>>>>>>>>>>(key: K_9) => (>>>>>>>>>>>(key: K_10) => any & { }) & { }) & { }) & { }) & { }) & { }) & { }) & { }) & { }) & { }) & { }) & { } >t : T const reduce = (u: U, update: (u: U) => T) => { @@ -97,7 +97,7 @@ export const updateIfChanged = (t: T) => { }; return reduce(t, (t: T) => t); ->reduce(t, (t: T) => t) : (>(key: K) => (>>(key: K_1) => (>>>(key: K_2) => (>>>>(key: K_3) => (>>>>>(key: K_4) => (>>>>>>(key: K_5) => (>>>>>>>(key: K_6) => (>>>>>>>>(key: K_7) => (>>>>>>>>>(key: K_8) => (>>>>>>>>>>(key: K_9) => (>>>>>>>>>>>(key: K_10) => any & { map: (updater: (u: Value>>>>>>>>>>) => Value>>>>>>>>>>) => T; set: (newU: Value>>>>>>>>>>) => T; }) & { map: (updater: (u: Value>>>>>>>>>) => Value>>>>>>>>>) => T; set: (newU: Value>>>>>>>>>) => T; }) & { map: (updater: (u: Value>>>>>>>>) => Value>>>>>>>>) => T; set: (newU: Value>>>>>>>>) => T; }) & { map: (updater: (u: Value>>>>>>>) => Value>>>>>>>) => T; set: (newU: Value>>>>>>>) => T; }) & { map: (updater: (u: Value>>>>>>) => Value>>>>>>) => T; set: (newU: Value>>>>>>) => T; }) & { map: (updater: (u: Value>>>>>) => Value>>>>>) => T; set: (newU: Value>>>>>) => T; }) & { map: (updater: (u: Value>>>>) => Value>>>>) => T; set: (newU: Value>>>>) => T; }) & { map: (updater: (u: Value>>>) => Value>>>) => T; set: (newU: Value>>>) => T; }) & { map: (updater: (u: Value>>) => Value>>) => T; set: (newU: Value>>) => T; }) & { map: (updater: (u: Value>) => Value>) => T; set: (newU: Value>) => T; }) & { map: (updater: (u: Value) => Value) => T; set: (newU: Value) => T; }) & { map: (updater: (u: T) => T) => T; set: (newU: T) => T; } +>reduce(t, (t: T) => t) : (>(key: K) => (>>(key: K_1) => (>>>(key: K_2) => (>>>>(key: K_3) => (>>>>>(key: K_4) => (>>>>>>(key: K_5) => (>>>>>>>(key: K_6) => (>>>>>>>>(key: K_7) => (>>>>>>>>>(key: K_8) => (>>>>>>>>>>(key: K_9) => (>>>>>>>>>>>(key: K_10) => any & { }) & { }) & { }) & { }) & { }) & { }) & { }) & { }) & { }) & { }) & { }) & { } >reduce : (u: U, update: (u: U) => T) => (>(key: K) => (>>(key: K_1) => any & { map: (updater: (u: Value) => Value>) => T; set: (newU: Value) => T; }) & { map: (updater: (u: Value) => Value>) => T; set: (newU: Value) => T; }) & { map: (updater: (u: U) => U) => T; set: (newU: U) => T; } >t : T >(t: T) => t : (t: T) => T diff --git a/tsc/testdata/baselines/reference/compiler/deferredMappedTypeAliasInstantiation.errors.txt b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeAliasInstantiation.errors.txt new file mode 100644 index 0000000000000..e1ad3e4e38642 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeAliasInstantiation.errors.txt @@ -0,0 +1,26 @@ +deferredMappedTypeAliasInstantiation.ts(9,1): error TS2322: Type 'string' is not assignable to type 'number'. +deferredMappedTypeAliasInstantiation.ts(16,1): error TS2322: Type 'string' is not assignable to type 'boolean'. + + +==== deferredMappedTypeAliasInstantiation.ts (2 errors) ==== + type Json = string | Json[]; + type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; + declare function direct(value: T): Parsed; + declare function indirect(value: U): { concrete: Parsed; recursive: Parsed; generic: Parsed }; + export const concrete = direct([] as string[]); + export const recursive = direct([] as Json[]); + export const instantiated = indirect(1); + const numeric: number[] = instantiated.generic; + instantiated.generic[0] = "error"; + ~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + + function generic(value: T) { + return indirect(value); + } + export const twice = generic(true); + const boolean: boolean[] = twice.generic; + twice.generic[0] = "error"; + ~~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'string' is not assignable to type 'boolean'. + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/deferredMappedTypeAliasInstantiation.js b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeAliasInstantiation.js new file mode 100644 index 0000000000000..d6e716c4b4090 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeAliasInstantiation.js @@ -0,0 +1,53 @@ +//// [tests/cases/compiler/deferredMappedTypeAliasInstantiation.ts] //// + +//// [deferredMappedTypeAliasInstantiation.ts] +type Json = string | Json[]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function direct(value: T): Parsed; +declare function indirect(value: U): { concrete: Parsed; recursive: Parsed; generic: Parsed }; +export const concrete = direct([] as string[]); +export const recursive = direct([] as Json[]); +export const instantiated = indirect(1); +const numeric: number[] = instantiated.generic; +instantiated.generic[0] = "error"; + +function generic(value: T) { + return indirect(value); +} +export const twice = generic(true); +const boolean: boolean[] = twice.generic; +twice.generic[0] = "error"; + + +//// [deferredMappedTypeAliasInstantiation.js] +export const concrete = direct([]); +export const recursive = direct([]); +export const instantiated = indirect(1); +const numeric = instantiated.generic; +instantiated.generic[0] = "error"; +function generic(value) { + return indirect(value); +} +export const twice = generic(true); +const boolean = twice.generic; +twice.generic[0] = "error"; + + +//// [deferredMappedTypeAliasInstantiation.d.ts] +type Json = string | Json[]; +type Parsed = T extends object ? { + [K in keyof T]: Parsed; +} : T; +export declare const concrete: Parsed; +export declare const recursive: Parsed; +export declare const instantiated: { + concrete: Parsed; + recursive: Parsed; + generic: Parsed; +}; +export declare const twice: { + concrete: Parsed; + recursive: Parsed; + generic: Parsed; +}; +export {}; diff --git a/tsc/testdata/baselines/reference/compiler/deferredMappedTypeAliasInstantiation.symbols b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeAliasInstantiation.symbols new file mode 100644 index 0000000000000..b225b672173a4 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeAliasInstantiation.symbols @@ -0,0 +1,89 @@ +//// [tests/cases/compiler/deferredMappedTypeAliasInstantiation.ts] //// + +=== deferredMappedTypeAliasInstantiation.ts === +type Json = string | Json[]; +>Json : Symbol(Json, Decl(deferredMappedTypeAliasInstantiation.ts, 0, 0)) +>Json : Symbol(Json, Decl(deferredMappedTypeAliasInstantiation.ts, 0, 0)) + +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +>Parsed : Symbol(Parsed, Decl(deferredMappedTypeAliasInstantiation.ts, 0, 28)) +>T : Symbol(T, Decl(deferredMappedTypeAliasInstantiation.ts, 1, 12)) +>T : Symbol(T, Decl(deferredMappedTypeAliasInstantiation.ts, 1, 12)) +>K : Symbol(K, Decl(deferredMappedTypeAliasInstantiation.ts, 1, 39)) +>T : Symbol(T, Decl(deferredMappedTypeAliasInstantiation.ts, 1, 12)) +>Parsed : Symbol(Parsed, Decl(deferredMappedTypeAliasInstantiation.ts, 0, 28)) +>T : Symbol(T, Decl(deferredMappedTypeAliasInstantiation.ts, 1, 12)) +>K : Symbol(K, Decl(deferredMappedTypeAliasInstantiation.ts, 1, 39)) +>T : Symbol(T, Decl(deferredMappedTypeAliasInstantiation.ts, 1, 12)) + +declare function direct(value: T): Parsed; +>direct : Symbol(direct, Decl(deferredMappedTypeAliasInstantiation.ts, 1, 73)) +>T : Symbol(T, Decl(deferredMappedTypeAliasInstantiation.ts, 2, 24)) +>value : Symbol(value, Decl(deferredMappedTypeAliasInstantiation.ts, 2, 27)) +>T : Symbol(T, Decl(deferredMappedTypeAliasInstantiation.ts, 2, 24)) +>Parsed : Symbol(Parsed, Decl(deferredMappedTypeAliasInstantiation.ts, 0, 28)) +>T : Symbol(T, Decl(deferredMappedTypeAliasInstantiation.ts, 2, 24)) + +declare function indirect(value: U): { concrete: Parsed; recursive: Parsed; generic: Parsed }; +>indirect : Symbol(indirect, Decl(deferredMappedTypeAliasInstantiation.ts, 2, 48)) +>U : Symbol(U, Decl(deferredMappedTypeAliasInstantiation.ts, 3, 26)) +>value : Symbol(value, Decl(deferredMappedTypeAliasInstantiation.ts, 3, 29)) +>U : Symbol(U, Decl(deferredMappedTypeAliasInstantiation.ts, 3, 26)) +>concrete : Symbol(concrete, Decl(deferredMappedTypeAliasInstantiation.ts, 3, 41)) +>Parsed : Symbol(Parsed, Decl(deferredMappedTypeAliasInstantiation.ts, 0, 28)) +>recursive : Symbol(recursive, Decl(deferredMappedTypeAliasInstantiation.ts, 3, 69)) +>Parsed : Symbol(Parsed, Decl(deferredMappedTypeAliasInstantiation.ts, 0, 28)) +>Json : Symbol(Json, Decl(deferredMappedTypeAliasInstantiation.ts, 0, 0)) +>generic : Symbol(generic, Decl(deferredMappedTypeAliasInstantiation.ts, 3, 96)) +>Parsed : Symbol(Parsed, Decl(deferredMappedTypeAliasInstantiation.ts, 0, 28)) +>U : Symbol(U, Decl(deferredMappedTypeAliasInstantiation.ts, 3, 26)) + +export const concrete = direct([] as string[]); +>concrete : Symbol(concrete, Decl(deferredMappedTypeAliasInstantiation.ts, 4, 12)) +>direct : Symbol(direct, Decl(deferredMappedTypeAliasInstantiation.ts, 1, 73)) + +export const recursive = direct([] as Json[]); +>recursive : Symbol(recursive, Decl(deferredMappedTypeAliasInstantiation.ts, 5, 12)) +>direct : Symbol(direct, Decl(deferredMappedTypeAliasInstantiation.ts, 1, 73)) +>Json : Symbol(Json, Decl(deferredMappedTypeAliasInstantiation.ts, 0, 0)) + +export const instantiated = indirect(1); +>instantiated : Symbol(instantiated, Decl(deferredMappedTypeAliasInstantiation.ts, 6, 12)) +>indirect : Symbol(indirect, Decl(deferredMappedTypeAliasInstantiation.ts, 2, 48)) + +const numeric: number[] = instantiated.generic; +>numeric : Symbol(numeric, Decl(deferredMappedTypeAliasInstantiation.ts, 7, 5)) +>instantiated.generic : Symbol(generic, Decl(deferredMappedTypeAliasInstantiation.ts, 3, 96)) +>instantiated : Symbol(instantiated, Decl(deferredMappedTypeAliasInstantiation.ts, 6, 12)) +>generic : Symbol(generic, Decl(deferredMappedTypeAliasInstantiation.ts, 3, 96)) + +instantiated.generic[0] = "error"; +>instantiated.generic : Symbol(generic, Decl(deferredMappedTypeAliasInstantiation.ts, 3, 96)) +>instantiated : Symbol(instantiated, Decl(deferredMappedTypeAliasInstantiation.ts, 6, 12)) +>generic : Symbol(generic, Decl(deferredMappedTypeAliasInstantiation.ts, 3, 96)) + +function generic(value: T) { +>generic : Symbol(generic, Decl(deferredMappedTypeAliasInstantiation.ts, 8, 34)) +>T : Symbol(T, Decl(deferredMappedTypeAliasInstantiation.ts, 10, 17)) +>value : Symbol(value, Decl(deferredMappedTypeAliasInstantiation.ts, 10, 20)) +>T : Symbol(T, Decl(deferredMappedTypeAliasInstantiation.ts, 10, 17)) + + return indirect(value); +>indirect : Symbol(indirect, Decl(deferredMappedTypeAliasInstantiation.ts, 2, 48)) +>value : Symbol(value, Decl(deferredMappedTypeAliasInstantiation.ts, 10, 20)) +} +export const twice = generic(true); +>twice : Symbol(twice, Decl(deferredMappedTypeAliasInstantiation.ts, 13, 12)) +>generic : Symbol(generic, Decl(deferredMappedTypeAliasInstantiation.ts, 8, 34)) + +const boolean: boolean[] = twice.generic; +>boolean : Symbol(boolean, Decl(deferredMappedTypeAliasInstantiation.ts, 14, 5)) +>twice.generic : Symbol(generic, Decl(deferredMappedTypeAliasInstantiation.ts, 3, 96)) +>twice : Symbol(twice, Decl(deferredMappedTypeAliasInstantiation.ts, 13, 12)) +>generic : Symbol(generic, Decl(deferredMappedTypeAliasInstantiation.ts, 3, 96)) + +twice.generic[0] = "error"; +>twice.generic : Symbol(generic, Decl(deferredMappedTypeAliasInstantiation.ts, 3, 96)) +>twice : Symbol(twice, Decl(deferredMappedTypeAliasInstantiation.ts, 13, 12)) +>generic : Symbol(generic, Decl(deferredMappedTypeAliasInstantiation.ts, 3, 96)) + diff --git a/tsc/testdata/baselines/reference/compiler/deferredMappedTypeAliasInstantiation.types b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeAliasInstantiation.types new file mode 100644 index 0000000000000..81c1e28ffe5e8 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeAliasInstantiation.types @@ -0,0 +1,85 @@ +//// [tests/cases/compiler/deferredMappedTypeAliasInstantiation.ts] //// + +=== deferredMappedTypeAliasInstantiation.ts === +type Json = string | Json[]; +>Json : Json + +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +>Parsed : Parsed + +declare function direct(value: T): Parsed; +>direct : (value: T) => Parsed +>value : T + +declare function indirect(value: U): { concrete: Parsed; recursive: Parsed; generic: Parsed }; +>indirect : (value: U) => { concrete: Parsed; recursive: Parsed; generic: Parsed; } +>value : U +>concrete : Parsed +>recursive : Parsed +>generic : Parsed + +export const concrete = direct([] as string[]); +>concrete : Parsed +>direct([] as string[]) : Parsed +>direct : (value: T) => Parsed +>[] as string[] : string[] +>[] : never[] + +export const recursive = direct([] as Json[]); +>recursive : Parsed +>direct([] as Json[]) : Parsed +>direct : (value: T) => Parsed +>[] as Json[] : Json[] +>[] : never[] + +export const instantiated = indirect(1); +>instantiated : { concrete: Parsed; recursive: Parsed; generic: Parsed; } +>indirect(1) : { concrete: Parsed; recursive: Parsed; generic: Parsed; } +>indirect : (value: U) => { concrete: Parsed; recursive: Parsed; generic: Parsed; } +>1 : 1 + +const numeric: number[] = instantiated.generic; +>numeric : number[] +>instantiated.generic : Parsed +>instantiated : { concrete: Parsed; recursive: Parsed; generic: Parsed; } +>generic : Parsed + +instantiated.generic[0] = "error"; +>instantiated.generic[0] = "error" : "error" +>instantiated.generic[0] : number +>instantiated.generic : Parsed +>instantiated : { concrete: Parsed; recursive: Parsed; generic: Parsed; } +>generic : Parsed +>0 : 0 +>"error" : "error" + +function generic(value: T) { +>generic : (value: T) => { concrete: Parsed; recursive: Parsed; generic: Parsed; } +>value : T + + return indirect(value); +>indirect(value) : { concrete: Parsed; recursive: Parsed; generic: Parsed; } +>indirect : (value: U) => { concrete: Parsed; recursive: Parsed; generic: Parsed; } +>value : T +} +export const twice = generic(true); +>twice : { concrete: Parsed; recursive: Parsed; generic: Parsed; } +>generic(true) : { concrete: Parsed; recursive: Parsed; generic: Parsed; } +>generic : (value: T) => { concrete: Parsed; recursive: Parsed; generic: Parsed; } +>true : true + +const boolean: boolean[] = twice.generic; +>boolean : boolean[] +>twice.generic : Parsed +>twice : { concrete: Parsed; recursive: Parsed; generic: Parsed; } +>generic : Parsed + +twice.generic[0] = "error"; +>twice.generic[0] = "error" : "error" +>twice.generic[0] : boolean +>twice.generic : Parsed +>twice : { concrete: Parsed; recursive: Parsed; generic: Parsed; } +>generic : Parsed +>0 : 0 +>"error" : "error" + diff --git a/tsc/testdata/baselines/reference/compiler/deferredMappedTypeCircularArguments.errors.txt b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeCircularArguments.errors.txt new file mode 100644 index 0000000000000..8be8ae62f6616 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeCircularArguments.errors.txt @@ -0,0 +1,18 @@ +usage.ts(4,18): error TS4109: Type arguments for 'Array' circularly reference themselves. +usage.ts(5,18): error TS4110: Tuple type arguments circularly reference themselves. + + +==== mapped.ts (0 errors) ==== + export type M = { [K in keyof T]: T extends M ? 1 : 2 }; + +==== usage.ts (2 errors) ==== + import type { M } from "./mapped.js"; + declare const array: M; + declare const tuple: M<[string]>; + export const a = array[0]; + ~~~~~~~~ +!!! error TS4109: Type arguments for 'Array' circularly reference themselves. + export const b = tuple[0]; + ~~~~~~~~ +!!! error TS4110: Tuple type arguments circularly reference themselves. + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/deferredMappedTypeCircularArguments.js b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeCircularArguments.js new file mode 100644 index 0000000000000..fd019d707caf9 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeCircularArguments.js @@ -0,0 +1,27 @@ +//// [tests/cases/compiler/deferredMappedTypeCircularArguments.ts] //// + +//// [mapped.ts] +export type M = { [K in keyof T]: T extends M ? 1 : 2 }; + +//// [usage.ts] +import type { M } from "./mapped.js"; +declare const array: M; +declare const tuple: M<[string]>; +export const a = array[0]; +export const b = tuple[0]; + + +//// [mapped.js] +export {}; +//// [usage.js] +export const a = array[0]; +export const b = tuple[0]; + + +//// [mapped.d.ts] +export type M = { + [K in keyof T]: T extends M ? 1 : 2; +}; +//// [usage.d.ts] +export declare const a: any; +export declare const b: any; diff --git a/tsc/testdata/baselines/reference/compiler/deferredMappedTypeCircularArguments.symbols b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeCircularArguments.symbols new file mode 100644 index 0000000000000..34f0229633232 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeCircularArguments.symbols @@ -0,0 +1,33 @@ +//// [tests/cases/compiler/deferredMappedTypeCircularArguments.ts] //// + +=== mapped.ts === +export type M = { [K in keyof T]: T extends M ? 1 : 2 }; +>M : Symbol(M, Decl(mapped.ts, 0, 0)) +>T : Symbol(T, Decl(mapped.ts, 0, 14)) +>K : Symbol(K, Decl(mapped.ts, 0, 22)) +>T : Symbol(T, Decl(mapped.ts, 0, 14)) +>T : Symbol(T, Decl(mapped.ts, 0, 14)) +>M : Symbol(M, Decl(mapped.ts, 0, 0)) +>T : Symbol(T, Decl(mapped.ts, 0, 14)) + +=== usage.ts === +import type { M } from "./mapped.js"; +>M : Symbol(M, Decl(usage.ts, 0, 13)) + +declare const array: M; +>array : Symbol(array, Decl(usage.ts, 1, 13)) +>M : Symbol(M, Decl(usage.ts, 0, 13)) + +declare const tuple: M<[string]>; +>tuple : Symbol(tuple, Decl(usage.ts, 2, 13)) +>M : Symbol(M, Decl(usage.ts, 0, 13)) + +export const a = array[0]; +>a : Symbol(a, Decl(usage.ts, 3, 12)) +>array : Symbol(array, Decl(usage.ts, 1, 13)) + +export const b = tuple[0]; +>b : Symbol(b, Decl(usage.ts, 4, 12)) +>tuple : Symbol(tuple, Decl(usage.ts, 2, 13)) +>0 : Symbol(0) + diff --git a/tsc/testdata/baselines/reference/compiler/deferredMappedTypeCircularArguments.types b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeCircularArguments.types new file mode 100644 index 0000000000000..d330f9e465fa8 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeCircularArguments.types @@ -0,0 +1,28 @@ +//// [tests/cases/compiler/deferredMappedTypeCircularArguments.ts] //// + +=== mapped.ts === +export type M = { [K in keyof T]: T extends M ? 1 : 2 }; +>M : M + +=== usage.ts === +import type { M } from "./mapped.js"; +>M : M + +declare const array: M; +>array : M + +declare const tuple: M<[string]>; +>tuple : M<[string]> + +export const a = array[0]; +>a : any +>array[0] : any +>array : M +>0 : 0 + +export const b = tuple[0]; +>b : any +>tuple[0] : any +>tuple : M<[string]> +>0 : 0 + diff --git a/tsc/testdata/baselines/reference/compiler/deferredMappedTypeDeclarationDepth.errors.txt b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeDeclarationDepth.errors.txt new file mode 100644 index 0000000000000..d902d556b2c16 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeDeclarationDepth.errors.txt @@ -0,0 +1,86 @@ +growing.ts(1,17): error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. +growing.ts(6,17): error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. +growing.ts(11,17): error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. +growing.ts(16,17): error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. +growing.ts(21,17): error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. + + +==== growing.ts (5 errors) ==== + export function tuple() { + ~~~~~ +!!! error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. + type C = { [K in keyof T]: C<[T]> }; + return null as unknown as C<[number]>; + } + + export function array() { + ~~~~~ +!!! error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. + type C = { [K in keyof T]: C }; + return null as unknown as C; + } + + export function changingTuple() { + ~~~~~~~~~~~~~ +!!! error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. + type C = { [K in keyof T]: C }; + return null as unknown as C<[number], "">; + } + + export function changingArray() { + ~~~~~~~~~~~~~ +!!! error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. + type C = { [K in keyof T]: C }; + return null as unknown as C; + } + + export function nestedContext() { + ~~~~~~~~~~~~~ +!!! error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. + type C = { [K in keyof T]: C> }; + return null as unknown as C<[number], [number]>; + } + +==== finite.ts (0 errors) ==== + type Previous = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; + + export function array() { + type P = T extends object ? { [K in keyof T]: P } : T; + return null as unknown as P; + } + + export function tuple() { + type P = T extends object ? { [K in keyof T]: P } : T; + return null as unknown as P<[[[[[[[[[[[[[number]]]]]]]]]]]]]>; + } + + export function composedArray() { + type P = T extends object ? { [K in keyof T]: P } : T; + type Q = T extends object ? { [K in keyof T]: Q } : T; + return null as unknown as P>; + } + + export function composedTuple() { + type P = T extends object ? { [K in keyof T]: P } : T; + type Q = T extends object ? { [K in keyof T]: Q } : T; + return null as unknown as P>; + } + + export function boundedArray() { + type C = { [K in keyof T]: D extends 0 ? T[K] : C }; + return null as unknown as C; + } + + export function boundedTuple() { + type C = { [K in keyof T]: D extends 0 ? T[K] : C }; + return null as unknown as C<[number], 13>; + } + + interface Step { next: T } + type BuildChain = D extends 0 ? T : BuildChain>; + + export function boundedChain() { + type C = { [K in keyof T]: D extends Step ? C : T[K] }; + return null as unknown as C<[number], BuildChain<13>>; + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/deferredMappedTypeDeclarationDepth.js b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeDeclarationDepth.js new file mode 100644 index 0000000000000..3a44ff6451dbc --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeDeclarationDepth.js @@ -0,0 +1,126 @@ +//// [tests/cases/compiler/deferredMappedTypeDeclarationDepth.ts] //// + +//// [growing.ts] +export function tuple() { + type C = { [K in keyof T]: C<[T]> }; + return null as unknown as C<[number]>; +} + +export function array() { + type C = { [K in keyof T]: C }; + return null as unknown as C; +} + +export function changingTuple() { + type C = { [K in keyof T]: C }; + return null as unknown as C<[number], "">; +} + +export function changingArray() { + type C = { [K in keyof T]: C }; + return null as unknown as C; +} + +export function nestedContext() { + type C = { [K in keyof T]: C> }; + return null as unknown as C<[number], [number]>; +} + +//// [finite.ts] +type Previous = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; + +export function array() { + type P = T extends object ? { [K in keyof T]: P } : T; + return null as unknown as P; +} + +export function tuple() { + type P = T extends object ? { [K in keyof T]: P } : T; + return null as unknown as P<[[[[[[[[[[[[[number]]]]]]]]]]]]]>; +} + +export function composedArray() { + type P = T extends object ? { [K in keyof T]: P } : T; + type Q = T extends object ? { [K in keyof T]: Q } : T; + return null as unknown as P>; +} + +export function composedTuple() { + type P = T extends object ? { [K in keyof T]: P } : T; + type Q = T extends object ? { [K in keyof T]: Q } : T; + return null as unknown as P>; +} + +export function boundedArray() { + type C = { [K in keyof T]: D extends 0 ? T[K] : C }; + return null as unknown as C; +} + +export function boundedTuple() { + type C = { [K in keyof T]: D extends 0 ? T[K] : C }; + return null as unknown as C<[number], 13>; +} + +interface Step { next: T } +type BuildChain = D extends 0 ? T : BuildChain>; + +export function boundedChain() { + type C = { [K in keyof T]: D extends Step ? C : T[K] }; + return null as unknown as C<[number], BuildChain<13>>; +} + + +//// [growing.js] +export function tuple() { + return null; +} +export function array() { + return null; +} +export function changingTuple() { + return null; +} +export function changingArray() { + return null; +} +export function nestedContext() { + return null; +} +//// [finite.js] +export function array() { + return null; +} +export function tuple() { + return null; +} +export function composedArray() { + return null; +} +export function composedTuple() { + return null; +} +export function boundedArray() { + return null; +} +export function boundedTuple() { + return null; +} +export function boundedChain() { + return null; +} + + +//// [finite.d.ts] +type Previous = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +export declare function array(): number[][][][][][][][][][][][][]; +export declare function tuple(): [[[[[[[[[[[[[number]]]]]]]]]]]]]; +export declare function composedArray(): number[][][][][][][][][][][][][]; +export declare function composedTuple(): [[[[[[[[[[[[[number]]]]]]]]]]]]]; +export declare function boundedArray(): number[][][][][][][][][][][][][][]; +export declare function boundedTuple(): [[[[[[[[[[[[[[number]]]]]]]]]]]]]]; +interface Step { + next: T; +} +type BuildChain = D extends 0 ? T : BuildChain>; +export declare function boundedChain(): [[[[[[[[[[[[[[number]]]]]]]]]]]]]]; +export {}; diff --git a/tsc/testdata/baselines/reference/compiler/deferredMappedTypeDeclarationDepth.symbols b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeDeclarationDepth.symbols new file mode 100644 index 0000000000000..647b957273382 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeDeclarationDepth.symbols @@ -0,0 +1,269 @@ +//// [tests/cases/compiler/deferredMappedTypeDeclarationDepth.ts] //// + +=== growing.ts === +export function tuple() { +>tuple : Symbol(tuple, Decl(growing.ts, 0, 0)) + + type C = { [K in keyof T]: C<[T]> }; +>C : Symbol(C, Decl(growing.ts, 0, 25)) +>T : Symbol(T, Decl(growing.ts, 1, 11)) +>K : Symbol(K, Decl(growing.ts, 1, 19)) +>T : Symbol(T, Decl(growing.ts, 1, 11)) +>C : Symbol(C, Decl(growing.ts, 0, 25)) +>T : Symbol(T, Decl(growing.ts, 1, 11)) + + return null as unknown as C<[number]>; +>C : Symbol(C, Decl(growing.ts, 0, 25)) +} + +export function array() { +>array : Symbol(array, Decl(growing.ts, 3, 1)) + + type C = { [K in keyof T]: C }; +>C : Symbol(C, Decl(growing.ts, 5, 25)) +>T : Symbol(T, Decl(growing.ts, 6, 11)) +>K : Symbol(K, Decl(growing.ts, 6, 19)) +>T : Symbol(T, Decl(growing.ts, 6, 11)) +>C : Symbol(C, Decl(growing.ts, 5, 25)) +>T : Symbol(T, Decl(growing.ts, 6, 11)) + + return null as unknown as C; +>C : Symbol(C, Decl(growing.ts, 5, 25)) +} + +export function changingTuple() { +>changingTuple : Symbol(changingTuple, Decl(growing.ts, 8, 1)) + + type C = { [K in keyof T]: C }; +>C : Symbol(C, Decl(growing.ts, 10, 33)) +>T : Symbol(T, Decl(growing.ts, 11, 11)) +>S : Symbol(S, Decl(growing.ts, 11, 13)) +>K : Symbol(K, Decl(growing.ts, 11, 37)) +>T : Symbol(T, Decl(growing.ts, 11, 11)) +>C : Symbol(C, Decl(growing.ts, 10, 33)) +>T : Symbol(T, Decl(growing.ts, 11, 11)) +>S : Symbol(S, Decl(growing.ts, 11, 13)) + + return null as unknown as C<[number], "">; +>C : Symbol(C, Decl(growing.ts, 10, 33)) +} + +export function changingArray() { +>changingArray : Symbol(changingArray, Decl(growing.ts, 13, 1)) + + type C = { [K in keyof T]: C }; +>C : Symbol(C, Decl(growing.ts, 15, 33)) +>T : Symbol(T, Decl(growing.ts, 16, 11)) +>S : Symbol(S, Decl(growing.ts, 16, 13)) +>K : Symbol(K, Decl(growing.ts, 16, 37)) +>T : Symbol(T, Decl(growing.ts, 16, 11)) +>C : Symbol(C, Decl(growing.ts, 15, 33)) +>T : Symbol(T, Decl(growing.ts, 16, 11)) +>S : Symbol(S, Decl(growing.ts, 16, 13)) + + return null as unknown as C; +>C : Symbol(C, Decl(growing.ts, 15, 33)) +} + +export function nestedContext() { +>nestedContext : Symbol(nestedContext, Decl(growing.ts, 18, 1)) + + type C = { [K in keyof T]: C> }; +>C : Symbol(C, Decl(growing.ts, 20, 33)) +>T : Symbol(T, Decl(growing.ts, 21, 11)) +>S : Symbol(S, Decl(growing.ts, 21, 13)) +>K : Symbol(K, Decl(growing.ts, 21, 22)) +>T : Symbol(T, Decl(growing.ts, 21, 11)) +>C : Symbol(C, Decl(growing.ts, 20, 33)) +>T : Symbol(T, Decl(growing.ts, 21, 11)) +>C : Symbol(C, Decl(growing.ts, 20, 33)) +>S : Symbol(S, Decl(growing.ts, 21, 13)) +>S : Symbol(S, Decl(growing.ts, 21, 13)) + + return null as unknown as C<[number], [number]>; +>C : Symbol(C, Decl(growing.ts, 20, 33)) +} + +=== finite.ts === +type Previous = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +>Previous : Symbol(Previous, Decl(finite.ts, 0, 0)) + +export function array() { +>array : Symbol(array, Decl(finite.ts, 0, 70)) + + type P = T extends object ? { [K in keyof T]: P } : T; +>P : Symbol(P, Decl(finite.ts, 2, 25)) +>T : Symbol(T, Decl(finite.ts, 3, 11)) +>T : Symbol(T, Decl(finite.ts, 3, 11)) +>K : Symbol(K, Decl(finite.ts, 3, 38)) +>T : Symbol(T, Decl(finite.ts, 3, 11)) +>P : Symbol(P, Decl(finite.ts, 2, 25)) +>T : Symbol(T, Decl(finite.ts, 3, 11)) +>K : Symbol(K, Decl(finite.ts, 3, 38)) +>T : Symbol(T, Decl(finite.ts, 3, 11)) + + return null as unknown as P; +>P : Symbol(P, Decl(finite.ts, 2, 25)) +} + +export function tuple() { +>tuple : Symbol(tuple, Decl(finite.ts, 5, 1)) + + type P = T extends object ? { [K in keyof T]: P } : T; +>P : Symbol(P, Decl(finite.ts, 7, 25)) +>T : Symbol(T, Decl(finite.ts, 8, 11)) +>T : Symbol(T, Decl(finite.ts, 8, 11)) +>K : Symbol(K, Decl(finite.ts, 8, 38)) +>T : Symbol(T, Decl(finite.ts, 8, 11)) +>P : Symbol(P, Decl(finite.ts, 7, 25)) +>T : Symbol(T, Decl(finite.ts, 8, 11)) +>K : Symbol(K, Decl(finite.ts, 8, 38)) +>T : Symbol(T, Decl(finite.ts, 8, 11)) + + return null as unknown as P<[[[[[[[[[[[[[number]]]]]]]]]]]]]>; +>P : Symbol(P, Decl(finite.ts, 7, 25)) +} + +export function composedArray() { +>composedArray : Symbol(composedArray, Decl(finite.ts, 10, 1)) + + type P = T extends object ? { [K in keyof T]: P } : T; +>P : Symbol(P, Decl(finite.ts, 12, 33)) +>T : Symbol(T, Decl(finite.ts, 13, 11)) +>T : Symbol(T, Decl(finite.ts, 13, 11)) +>K : Symbol(K, Decl(finite.ts, 13, 38)) +>T : Symbol(T, Decl(finite.ts, 13, 11)) +>P : Symbol(P, Decl(finite.ts, 12, 33)) +>T : Symbol(T, Decl(finite.ts, 13, 11)) +>K : Symbol(K, Decl(finite.ts, 13, 38)) +>T : Symbol(T, Decl(finite.ts, 13, 11)) + + type Q = T extends object ? { [K in keyof T]: Q } : T; +>Q : Symbol(Q, Decl(finite.ts, 13, 67)) +>T : Symbol(T, Decl(finite.ts, 14, 11)) +>T : Symbol(T, Decl(finite.ts, 14, 11)) +>K : Symbol(K, Decl(finite.ts, 14, 38)) +>T : Symbol(T, Decl(finite.ts, 14, 11)) +>Q : Symbol(Q, Decl(finite.ts, 13, 67)) +>T : Symbol(T, Decl(finite.ts, 14, 11)) +>K : Symbol(K, Decl(finite.ts, 14, 38)) +>T : Symbol(T, Decl(finite.ts, 14, 11)) + + return null as unknown as P>; +>P : Symbol(P, Decl(finite.ts, 12, 33)) +>Q : Symbol(Q, Decl(finite.ts, 13, 67)) +} + +export function composedTuple() { +>composedTuple : Symbol(composedTuple, Decl(finite.ts, 16, 1)) + + type P = T extends object ? { [K in keyof T]: P } : T; +>P : Symbol(P, Decl(finite.ts, 18, 33)) +>T : Symbol(T, Decl(finite.ts, 19, 11)) +>T : Symbol(T, Decl(finite.ts, 19, 11)) +>K : Symbol(K, Decl(finite.ts, 19, 38)) +>T : Symbol(T, Decl(finite.ts, 19, 11)) +>P : Symbol(P, Decl(finite.ts, 18, 33)) +>T : Symbol(T, Decl(finite.ts, 19, 11)) +>K : Symbol(K, Decl(finite.ts, 19, 38)) +>T : Symbol(T, Decl(finite.ts, 19, 11)) + + type Q = T extends object ? { [K in keyof T]: Q } : T; +>Q : Symbol(Q, Decl(finite.ts, 19, 67)) +>T : Symbol(T, Decl(finite.ts, 20, 11)) +>T : Symbol(T, Decl(finite.ts, 20, 11)) +>K : Symbol(K, Decl(finite.ts, 20, 38)) +>T : Symbol(T, Decl(finite.ts, 20, 11)) +>Q : Symbol(Q, Decl(finite.ts, 19, 67)) +>T : Symbol(T, Decl(finite.ts, 20, 11)) +>K : Symbol(K, Decl(finite.ts, 20, 38)) +>T : Symbol(T, Decl(finite.ts, 20, 11)) + + return null as unknown as P>; +>P : Symbol(P, Decl(finite.ts, 18, 33)) +>Q : Symbol(Q, Decl(finite.ts, 19, 67)) +} + +export function boundedArray() { +>boundedArray : Symbol(boundedArray, Decl(finite.ts, 22, 1)) + + type C = { [K in keyof T]: D extends 0 ? T[K] : C }; +>C : Symbol(C, Decl(finite.ts, 24, 32)) +>T : Symbol(T, Decl(finite.ts, 25, 11)) +>D : Symbol(D, Decl(finite.ts, 25, 13)) +>K : Symbol(K, Decl(finite.ts, 25, 37)) +>T : Symbol(T, Decl(finite.ts, 25, 11)) +>D : Symbol(D, Decl(finite.ts, 25, 13)) +>T : Symbol(T, Decl(finite.ts, 25, 11)) +>K : Symbol(K, Decl(finite.ts, 25, 37)) +>C : Symbol(C, Decl(finite.ts, 24, 32)) +>T : Symbol(T, Decl(finite.ts, 25, 11)) +>Previous : Symbol(Previous, Decl(finite.ts, 0, 0)) +>D : Symbol(D, Decl(finite.ts, 25, 13)) + + return null as unknown as C; +>C : Symbol(C, Decl(finite.ts, 24, 32)) +} + +export function boundedTuple() { +>boundedTuple : Symbol(boundedTuple, Decl(finite.ts, 27, 1)) + + type C = { [K in keyof T]: D extends 0 ? T[K] : C }; +>C : Symbol(C, Decl(finite.ts, 29, 32)) +>T : Symbol(T, Decl(finite.ts, 30, 11)) +>D : Symbol(D, Decl(finite.ts, 30, 13)) +>K : Symbol(K, Decl(finite.ts, 30, 37)) +>T : Symbol(T, Decl(finite.ts, 30, 11)) +>D : Symbol(D, Decl(finite.ts, 30, 13)) +>T : Symbol(T, Decl(finite.ts, 30, 11)) +>K : Symbol(K, Decl(finite.ts, 30, 37)) +>C : Symbol(C, Decl(finite.ts, 29, 32)) +>T : Symbol(T, Decl(finite.ts, 30, 11)) +>Previous : Symbol(Previous, Decl(finite.ts, 0, 0)) +>D : Symbol(D, Decl(finite.ts, 30, 13)) + + return null as unknown as C<[number], 13>; +>C : Symbol(C, Decl(finite.ts, 29, 32)) +} + +interface Step { next: T } +>Step : Symbol(Step, Decl(finite.ts, 32, 1)) +>T : Symbol(T, Decl(finite.ts, 34, 15)) +>next : Symbol(Step.next, Decl(finite.ts, 34, 19)) +>T : Symbol(T, Decl(finite.ts, 34, 15)) + +type BuildChain = D extends 0 ? T : BuildChain>; +>BuildChain : Symbol(BuildChain, Decl(finite.ts, 34, 29)) +>D : Symbol(D, Decl(finite.ts, 35, 16)) +>T : Symbol(T, Decl(finite.ts, 35, 33)) +>D : Symbol(D, Decl(finite.ts, 35, 16)) +>T : Symbol(T, Decl(finite.ts, 35, 33)) +>BuildChain : Symbol(BuildChain, Decl(finite.ts, 34, 29)) +>Previous : Symbol(Previous, Decl(finite.ts, 0, 0)) +>D : Symbol(D, Decl(finite.ts, 35, 16)) +>Step : Symbol(Step, Decl(finite.ts, 32, 1)) +>T : Symbol(T, Decl(finite.ts, 35, 33)) + +export function boundedChain() { +>boundedChain : Symbol(boundedChain, Decl(finite.ts, 35, 97)) + + type C = { [K in keyof T]: D extends Step ? C : T[K] }; +>C : Symbol(C, Decl(finite.ts, 37, 32)) +>T : Symbol(T, Decl(finite.ts, 38, 11)) +>D : Symbol(D, Decl(finite.ts, 38, 13)) +>K : Symbol(K, Decl(finite.ts, 38, 22)) +>T : Symbol(T, Decl(finite.ts, 38, 11)) +>D : Symbol(D, Decl(finite.ts, 38, 13)) +>Step : Symbol(Step, Decl(finite.ts, 32, 1)) +>R : Symbol(R, Decl(finite.ts, 38, 57)) +>C : Symbol(C, Decl(finite.ts, 37, 32)) +>T : Symbol(T, Decl(finite.ts, 38, 11)) +>R : Symbol(R, Decl(finite.ts, 38, 57)) +>T : Symbol(T, Decl(finite.ts, 38, 11)) +>K : Symbol(K, Decl(finite.ts, 38, 22)) + + return null as unknown as C<[number], BuildChain<13>>; +>C : Symbol(C, Decl(finite.ts, 37, 32)) +>BuildChain : Symbol(BuildChain, Decl(finite.ts, 34, 29)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/deferredMappedTypeDeclarationDepth.types b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeDeclarationDepth.types new file mode 100644 index 0000000000000..de0c859292c3a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeDeclarationDepth.types @@ -0,0 +1,151 @@ +//// [tests/cases/compiler/deferredMappedTypeDeclarationDepth.ts] //// + +=== growing.ts === +export function tuple() { +>tuple : () => [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[any]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] + + type C = { [K in keyof T]: C<[T]> }; +>C : { [K in keyof T]: [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[any]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]; } + + return null as unknown as C<[number]>; +>null as unknown as C<[number]> : [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[any]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] +>null as unknown : unknown +} + +export function array() { +>array : () => any[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][] + + type C = { [K in keyof T]: C }; +>C : { [K in keyof T]: any[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]; } + + return null as unknown as C; +>null as unknown as C : any[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][] +>null as unknown : unknown +} + +export function changingTuple() { +>changingTuple : () => [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[any]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] + + type C = { [K in keyof T]: C }; +>C : { [K in keyof T]: { [K_1 in keyof T]: { [K_2 in keyof T]: { [K_3 in keyof T]: { [K_4 in keyof T]: { [K_5 in keyof T]: { [K_6 in keyof T]: { [K_7 in keyof T]: { [K_8 in keyof T]: { [K_9 in keyof T]: { [K_10 in keyof T]: any; }; }; }; }; }; }; }; }; }; }; } + + return null as unknown as C<[number], "">; +>null as unknown as C<[number], ""> : [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[any]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] +>null as unknown : unknown +} + +export function changingArray() { +>changingArray : () => any[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][] + + type C = { [K in keyof T]: C }; +>C : { [K in keyof T]: { [K_1 in keyof T]: { [K_2 in keyof T]: { [K_3 in keyof T]: { [K_4 in keyof T]: { [K_5 in keyof T]: { [K_6 in keyof T]: { [K_7 in keyof T]: { [K_8 in keyof T]: { [K_9 in keyof T]: { [K_10 in keyof T]: any; }; }; }; }; }; }; }; }; }; }; } + + return null as unknown as C; +>null as unknown as C : any[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][] +>null as unknown : unknown +} + +export function nestedContext() { +>nestedContext : () => [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[any]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] + + type C = { [K in keyof T]: C> }; +>C : { [K in keyof T]: { [K_1 in keyof T]: { [K_2 in keyof T]: { [K_3 in keyof T]: { [K_4 in keyof T]: { [K_5 in keyof T]: { [K_6 in keyof T]: { [K_7 in keyof T]: { [K_8 in keyof T]: { [K_9 in keyof T]: { [K_10 in keyof T]: any; }; }; }; }; }; }; }; }; }; }; } + + return null as unknown as C<[number], [number]>; +>null as unknown as C<[number], [number]> : [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[any]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] +>null as unknown : unknown +} + +=== finite.ts === +type Previous = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +>Previous : Previous + +export function array() { +>array : () => number[][][][][][][][][][][][][] + + type P = T extends object ? { [K in keyof T]: P } : T; +>P : T extends object ? { [K in keyof T]: T[K] extends infer T_1 ? T_1 extends T[K] ? T_1 extends object ? { [K_1 in keyof T_1]: T_1[K_1] extends infer T_2 ? T_2 extends T_1[K_1] ? T_2 extends object ? { [K_2 in keyof T_2]: T_2[K_2] extends infer T_3 ? T_3 extends T_2[K_2] ? T_3 extends object ? { [K_3 in keyof T_3]: T_3[K_3] extends infer T_4 ? T_4 extends T_3[K_3] ? T_4 extends object ? { [K_4 in keyof T_4]: T_4[K_4] extends infer T_5 ? T_5 extends T_4[K_4] ? T_5 extends object ? { [K_5 in keyof T_5]: T_5[K_5] extends infer T_6 ? T_6 extends T_5[K_5] ? T_6 extends object ? { [K_6 in keyof T_6]: T_6[K_6] extends infer T_7 ? T_7 extends T_6[K_6] ? T_7 extends object ? { [K_7 in keyof T_7]: T_7[K_7] extends infer T_8 ? T_8 extends T_7[K_7] ? T_8 extends object ? { [K_8 in keyof T_8]: T_8[K_8] extends infer T_9 ? T_9 extends T_8[K_8] ? T_9 extends object ? { [K_9 in keyof T_9]: T_9[K_9] extends infer T_10 ? T_10 extends T_9[K_9] ? T_10 extends object ? { [K_10 in keyof T_10]: any; } : T_10 : never : never; } : T_9 : never : never; } : T_8 : never : never; } : T_7 : never : never; } : T_6 : never : never; } : T_5 : never : never; } : T_4 : never : never; } : T_3 : never : never; } : T_2 : never : never; } : T_1 : never : never; } : T + + return null as unknown as P; +>null as unknown as P : number[][][][][][][][][][][][][] +>null as unknown : unknown +} + +export function tuple() { +>tuple : () => [[[[[[[[[[[[[number]]]]]]]]]]]]] + + type P = T extends object ? { [K in keyof T]: P } : T; +>P : T extends object ? { [K in keyof T]: T[K] extends infer T_1 ? T_1 extends T[K] ? T_1 extends object ? { [K_1 in keyof T_1]: T_1[K_1] extends infer T_2 ? T_2 extends T_1[K_1] ? T_2 extends object ? { [K_2 in keyof T_2]: T_2[K_2] extends infer T_3 ? T_3 extends T_2[K_2] ? T_3 extends object ? { [K_3 in keyof T_3]: T_3[K_3] extends infer T_4 ? T_4 extends T_3[K_3] ? T_4 extends object ? { [K_4 in keyof T_4]: T_4[K_4] extends infer T_5 ? T_5 extends T_4[K_4] ? T_5 extends object ? { [K_5 in keyof T_5]: T_5[K_5] extends infer T_6 ? T_6 extends T_5[K_5] ? T_6 extends object ? { [K_6 in keyof T_6]: T_6[K_6] extends infer T_7 ? T_7 extends T_6[K_6] ? T_7 extends object ? { [K_7 in keyof T_7]: T_7[K_7] extends infer T_8 ? T_8 extends T_7[K_7] ? T_8 extends object ? { [K_8 in keyof T_8]: T_8[K_8] extends infer T_9 ? T_9 extends T_8[K_8] ? T_9 extends object ? { [K_9 in keyof T_9]: T_9[K_9] extends infer T_10 ? T_10 extends T_9[K_9] ? T_10 extends object ? { [K_10 in keyof T_10]: any; } : T_10 : never : never; } : T_9 : never : never; } : T_8 : never : never; } : T_7 : never : never; } : T_6 : never : never; } : T_5 : never : never; } : T_4 : never : never; } : T_3 : never : never; } : T_2 : never : never; } : T_1 : never : never; } : T + + return null as unknown as P<[[[[[[[[[[[[[number]]]]]]]]]]]]]>; +>null as unknown as P<[[[[[[[[[[[[[number]]]]]]]]]]]]]> : [[[[[[[[[[[[[number]]]]]]]]]]]]] +>null as unknown : unknown +} + +export function composedArray() { +>composedArray : () => number[][][][][][][][][][][][][] + + type P = T extends object ? { [K in keyof T]: P } : T; +>P : T extends object ? { [K in keyof T]: T[K] extends infer T_1 ? T_1 extends T[K] ? T_1 extends object ? { [K_1 in keyof T_1]: T_1[K_1] extends infer T_2 ? T_2 extends T_1[K_1] ? T_2 extends object ? { [K_2 in keyof T_2]: T_2[K_2] extends infer T_3 ? T_3 extends T_2[K_2] ? T_3 extends object ? { [K_3 in keyof T_3]: T_3[K_3] extends infer T_4 ? T_4 extends T_3[K_3] ? T_4 extends object ? { [K_4 in keyof T_4]: T_4[K_4] extends infer T_5 ? T_5 extends T_4[K_4] ? T_5 extends object ? { [K_5 in keyof T_5]: T_5[K_5] extends infer T_6 ? T_6 extends T_5[K_5] ? T_6 extends object ? { [K_6 in keyof T_6]: T_6[K_6] extends infer T_7 ? T_7 extends T_6[K_6] ? T_7 extends object ? { [K_7 in keyof T_7]: T_7[K_7] extends infer T_8 ? T_8 extends T_7[K_7] ? T_8 extends object ? { [K_8 in keyof T_8]: T_8[K_8] extends infer T_9 ? T_9 extends T_8[K_8] ? T_9 extends object ? { [K_9 in keyof T_9]: T_9[K_9] extends infer T_10 ? T_10 extends T_9[K_9] ? T_10 extends object ? { [K_10 in keyof T_10]: any; } : T_10 : never : never; } : T_9 : never : never; } : T_8 : never : never; } : T_7 : never : never; } : T_6 : never : never; } : T_5 : never : never; } : T_4 : never : never; } : T_3 : never : never; } : T_2 : never : never; } : T_1 : never : never; } : T + + type Q = T extends object ? { [K in keyof T]: Q } : T; +>Q : T extends object ? { [K in keyof T]: T[K] extends infer T_1 ? T_1 extends T[K] ? T_1 extends object ? { [K_1 in keyof T_1]: T_1[K_1] extends infer T_2 ? T_2 extends T_1[K_1] ? T_2 extends object ? { [K_2 in keyof T_2]: T_2[K_2] extends infer T_3 ? T_3 extends T_2[K_2] ? T_3 extends object ? { [K_3 in keyof T_3]: T_3[K_3] extends infer T_4 ? T_4 extends T_3[K_3] ? T_4 extends object ? { [K_4 in keyof T_4]: T_4[K_4] extends infer T_5 ? T_5 extends T_4[K_4] ? T_5 extends object ? { [K_5 in keyof T_5]: T_5[K_5] extends infer T_6 ? T_6 extends T_5[K_5] ? T_6 extends object ? { [K_6 in keyof T_6]: T_6[K_6] extends infer T_7 ? T_7 extends T_6[K_6] ? T_7 extends object ? { [K_7 in keyof T_7]: T_7[K_7] extends infer T_8 ? T_8 extends T_7[K_7] ? T_8 extends object ? { [K_8 in keyof T_8]: T_8[K_8] extends infer T_9 ? T_9 extends T_8[K_8] ? T_9 extends object ? { [K_9 in keyof T_9]: T_9[K_9] extends infer T_10 ? T_10 extends T_9[K_9] ? T_10 extends object ? { [K_10 in keyof T_10]: any; } : T_10 : never : never; } : T_9 : never : never; } : T_8 : never : never; } : T_7 : never : never; } : T_6 : never : never; } : T_5 : never : never; } : T_4 : never : never; } : T_3 : never : never; } : T_2 : never : never; } : T_1 : never : never; } : T + + return null as unknown as P>; +>null as unknown as P> : number[][][][][][][][][][][][][] +>null as unknown : unknown +} + +export function composedTuple() { +>composedTuple : () => [[[[[[[[[[[[[number]]]]]]]]]]]]] + + type P = T extends object ? { [K in keyof T]: P } : T; +>P : T extends object ? { [K in keyof T]: T[K] extends infer T_1 ? T_1 extends T[K] ? T_1 extends object ? { [K_1 in keyof T_1]: T_1[K_1] extends infer T_2 ? T_2 extends T_1[K_1] ? T_2 extends object ? { [K_2 in keyof T_2]: T_2[K_2] extends infer T_3 ? T_3 extends T_2[K_2] ? T_3 extends object ? { [K_3 in keyof T_3]: T_3[K_3] extends infer T_4 ? T_4 extends T_3[K_3] ? T_4 extends object ? { [K_4 in keyof T_4]: T_4[K_4] extends infer T_5 ? T_5 extends T_4[K_4] ? T_5 extends object ? { [K_5 in keyof T_5]: T_5[K_5] extends infer T_6 ? T_6 extends T_5[K_5] ? T_6 extends object ? { [K_6 in keyof T_6]: T_6[K_6] extends infer T_7 ? T_7 extends T_6[K_6] ? T_7 extends object ? { [K_7 in keyof T_7]: T_7[K_7] extends infer T_8 ? T_8 extends T_7[K_7] ? T_8 extends object ? { [K_8 in keyof T_8]: T_8[K_8] extends infer T_9 ? T_9 extends T_8[K_8] ? T_9 extends object ? { [K_9 in keyof T_9]: T_9[K_9] extends infer T_10 ? T_10 extends T_9[K_9] ? T_10 extends object ? { [K_10 in keyof T_10]: any; } : T_10 : never : never; } : T_9 : never : never; } : T_8 : never : never; } : T_7 : never : never; } : T_6 : never : never; } : T_5 : never : never; } : T_4 : never : never; } : T_3 : never : never; } : T_2 : never : never; } : T_1 : never : never; } : T + + type Q = T extends object ? { [K in keyof T]: Q } : T; +>Q : T extends object ? { [K in keyof T]: T[K] extends infer T_1 ? T_1 extends T[K] ? T_1 extends object ? { [K_1 in keyof T_1]: T_1[K_1] extends infer T_2 ? T_2 extends T_1[K_1] ? T_2 extends object ? { [K_2 in keyof T_2]: T_2[K_2] extends infer T_3 ? T_3 extends T_2[K_2] ? T_3 extends object ? { [K_3 in keyof T_3]: T_3[K_3] extends infer T_4 ? T_4 extends T_3[K_3] ? T_4 extends object ? { [K_4 in keyof T_4]: T_4[K_4] extends infer T_5 ? T_5 extends T_4[K_4] ? T_5 extends object ? { [K_5 in keyof T_5]: T_5[K_5] extends infer T_6 ? T_6 extends T_5[K_5] ? T_6 extends object ? { [K_6 in keyof T_6]: T_6[K_6] extends infer T_7 ? T_7 extends T_6[K_6] ? T_7 extends object ? { [K_7 in keyof T_7]: T_7[K_7] extends infer T_8 ? T_8 extends T_7[K_7] ? T_8 extends object ? { [K_8 in keyof T_8]: T_8[K_8] extends infer T_9 ? T_9 extends T_8[K_8] ? T_9 extends object ? { [K_9 in keyof T_9]: T_9[K_9] extends infer T_10 ? T_10 extends T_9[K_9] ? T_10 extends object ? { [K_10 in keyof T_10]: any; } : T_10 : never : never; } : T_9 : never : never; } : T_8 : never : never; } : T_7 : never : never; } : T_6 : never : never; } : T_5 : never : never; } : T_4 : never : never; } : T_3 : never : never; } : T_2 : never : never; } : T_1 : never : never; } : T + + return null as unknown as P>; +>null as unknown as P> : [[[[[[[[[[[[[number]]]]]]]]]]]]] +>null as unknown : unknown +} + +export function boundedArray() { +>boundedArray : () => number[][][][][][][][][][][][][][] + + type C = { [K in keyof T]: D extends 0 ? T[K] : C }; +>C : { [K in keyof T]: D extends 0 ? T[K] : { [K_1 in keyof T]: Previous[D] extends infer T_1 ? T_1 extends Previous[D] ? T_1 extends 0 ? T[K_1] : { [K_2 in keyof T]: Previous[T_1] extends infer T_2 ? T_2 extends Previous[T_1] ? T_2 extends 0 ? T[K_2] : { [K_3 in keyof T]: Previous[T_2] extends infer T_3 ? T_3 extends Previous[T_2] ? T_3 extends 0 ? T[K_3] : { [K_4 in keyof T]: Previous[T_3] extends infer T_4 ? T_4 extends Previous[T_3] ? T_4 extends 0 ? T[K_4] : { [K_5 in keyof T]: Previous[T_4] extends infer T_5 ? T_5 extends Previous[T_4] ? T_5 extends 0 ? T[K_5] : { [K_6 in keyof T]: Previous[T_5] extends infer T_6 ? T_6 extends Previous[T_5] ? T_6 extends 0 ? T[K_6] : { [K_7 in keyof T]: Previous[T_6] extends infer T_7 ? T_7 extends Previous[T_6] ? T_7 extends 0 ? T[K_7] : { [K_8 in keyof T]: Previous[T_7] extends infer T_8 ? T_8 extends Previous[T_7] ? T_8 extends 0 ? T[K_8] : { [K_9 in keyof T]: Previous[T_8] extends infer T_9 ? T_9 extends Previous[T_8] ? T_9 extends 0 ? T[K_9] : { [K_10 in keyof T]: Previous[T_9] extends infer T_10 ? T_10 extends Previous[T_9] ? T_10 extends 0 ? T[K_10] : any : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; }; } + + return null as unknown as C; +>null as unknown as C : number[][][][][][][][][][][][][][] +>null as unknown : unknown +} + +export function boundedTuple() { +>boundedTuple : () => [[[[[[[[[[[[[[number]]]]]]]]]]]]]] + + type C = { [K in keyof T]: D extends 0 ? T[K] : C }; +>C : { [K in keyof T]: D extends 0 ? T[K] : { [K_1 in keyof T]: Previous[D] extends infer T_1 ? T_1 extends Previous[D] ? T_1 extends 0 ? T[K_1] : { [K_2 in keyof T]: Previous[T_1] extends infer T_2 ? T_2 extends Previous[T_1] ? T_2 extends 0 ? T[K_2] : { [K_3 in keyof T]: Previous[T_2] extends infer T_3 ? T_3 extends Previous[T_2] ? T_3 extends 0 ? T[K_3] : { [K_4 in keyof T]: Previous[T_3] extends infer T_4 ? T_4 extends Previous[T_3] ? T_4 extends 0 ? T[K_4] : { [K_5 in keyof T]: Previous[T_4] extends infer T_5 ? T_5 extends Previous[T_4] ? T_5 extends 0 ? T[K_5] : { [K_6 in keyof T]: Previous[T_5] extends infer T_6 ? T_6 extends Previous[T_5] ? T_6 extends 0 ? T[K_6] : { [K_7 in keyof T]: Previous[T_6] extends infer T_7 ? T_7 extends Previous[T_6] ? T_7 extends 0 ? T[K_7] : { [K_8 in keyof T]: Previous[T_7] extends infer T_8 ? T_8 extends Previous[T_7] ? T_8 extends 0 ? T[K_8] : { [K_9 in keyof T]: Previous[T_8] extends infer T_9 ? T_9 extends Previous[T_8] ? T_9 extends 0 ? T[K_9] : { [K_10 in keyof T]: Previous[T_9] extends infer T_10 ? T_10 extends Previous[T_9] ? T_10 extends 0 ? T[K_10] : any : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; }; } + + return null as unknown as C<[number], 13>; +>null as unknown as C<[number], 13> : [[[[[[[[[[[[[[number]]]]]]]]]]]]]] +>null as unknown : unknown +} + +interface Step { next: T } +>next : T + +type BuildChain = D extends 0 ? T : BuildChain>; +>BuildChain : BuildChain + +export function boundedChain() { +>boundedChain : () => [[[[[[[[[[[[[[number]]]]]]]]]]]]]] + + type C = { [K in keyof T]: D extends Step ? C : T[K] }; +>C : { [K in keyof T]: D extends Step ? { [K_1 in keyof T]: R extends Step ? C : T[K_1]; } : T[K]; } + + return null as unknown as C<[number], BuildChain<13>>; +>null as unknown as C<[number], BuildChain<13>> : [[[[[[[[[[[[[[number]]]]]]]]]]]]]] +>null as unknown : unknown +} + diff --git a/tsc/testdata/baselines/reference/compiler/deferredMappedTypeRelations.errors.txt b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeRelations.errors.txt new file mode 100644 index 0000000000000..ff6cc2916ff81 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeRelations.errors.txt @@ -0,0 +1,156 @@ +deferredMappedTypeRelations.ts(5,7): error TS2322: Type 'Deep' is not assignable to type 'Deep'. + Type 'Deep' is not assignable to type 'Deep'. + Type 'Deep' is not assignable to type 'Deep'. + Type 'Deep' is not assignable to type 'Deep'. + Type 'string' is not assignable to type 'number'. +deferredMappedTypeRelations.ts(9,7): error TS2322: Type 'Deep<[[[[string]]]]>' is not assignable to type 'Deep<[[[[number]]]]>'. + Type 'Deep<[[[string]]]>' is not assignable to type 'Deep<[[[number]]]>'. + Type 'Deep<[[string]]>' is not assignable to type 'Deep<[[number]]>'. + Type 'Deep<[string]>' is not assignable to type 'Deep<[number]>'. + Type 'string' is not assignable to type 'number'. +deferredMappedTypeRelations.ts(13,7): error TS2322: Type 'DeepReadonly' is not assignable to type 'DeepReadonly'. + Type 'DeepReadonly' is not assignable to type 'DeepReadonly'. + Type 'DeepReadonly' is not assignable to type 'DeepReadonly'. + Type 'DeepReadonly' is not assignable to type 'DeepReadonly'. + Type 'string' is not assignable to type 'number'. +deferredMappedTypeRelations.ts(17,7): error TS2322: Type 'DeepReadonly<[[[[string]]]]>' is not assignable to type 'DeepReadonly<[[[[number]]]]>'. + Type 'DeepReadonly<[[[string]]]>' is not assignable to type 'DeepReadonly<[[[number]]]>'. + Type 'DeepReadonly<[[string]]>' is not assignable to type 'DeepReadonly<[[number]]>'. + Type 'DeepReadonly<[string]>' is not assignable to type 'DeepReadonly<[number]>'. + Type 'string' is not assignable to type 'number'. +deferredMappedTypeRelations.ts(27,7): error TS2322: Type 'number' is not assignable to type 'string'. +deferredMappedTypeRelations.ts(36,7): error TS2322: Type 'Nest' is not assignable to type 'Nest'. + Type 'Nest' is not assignable to type 'Nest'. + Type 'Nest' is not assignable to type 'Nest'. + Type 'Nest' is not assignable to type 'Nest'. + Type 'Nest' is not assignable to type 'Nest'. + Type 'string' is not assignable to type 'number'. +deferredMappedTypeRelations.ts(39,7): error TS2322: Type 'Nest<[string], 4>' is not assignable to type 'Nest<[number], 4>'. + Type 'Nest<[string], 3>' is not assignable to type 'Nest<[number], 3>'. + Type 'Nest<[string], 2>' is not assignable to type 'Nest<[number], 2>'. + Type 'Nest<[string], 1>' is not assignable to type 'Nest<[number], 1>'. + Type 'Nest<[string], 0>' is not assignable to type 'Nest<[number], 0>'. + Type 'string' is not assignable to type 'number'. +deferredMappedTypeRelations.ts(47,7): error TS2322: Type 'ChainNest<[string], Step>>>>' is not assignable to type 'ChainNest<[number], Step>>>>'. + Type 'ChainNest<[string], Step>>>' is not assignable to type 'ChainNest<[number], Step>>>'. + Type 'ChainNest<[string], Step>>' is not assignable to type 'ChainNest<[number], Step>>'. + Type 'ChainNest<[string], Step>' is not assignable to type 'ChainNest<[number], Step>'. + Type 'ChainNest<[string], null>' is not assignable to type 'ChainNest<[number], null>'. + Type 'string' is not assignable to type 'number'. +deferredMappedTypeRelations.ts(53,7): error TS2322: Type 'Deep' is not assignable to type 'Deep'. + Type 'Deep' is not assignable to type 'Deep'. + Type 'Deep' is not assignable to type 'Deep'. + Type 'Deep' is not assignable to type 'Deep'. + Type 'string' is not assignable to type 'number'. + + +==== deferredMappedTypeRelations.ts (9 errors) ==== + type Deep = T extends object ? { [K in keyof T]: Deep } : T; + type DeepReadonly = T extends object ? { readonly [K in keyof T]: DeepReadonly } : T; + + declare const array: Deep; + const badArray: Deep = array; + ~~~~~~~~ +!!! error TS2322: Type 'Deep' is not assignable to type 'Deep'. +!!! error TS2322: Type 'Deep' is not assignable to type 'Deep'. +!!! error TS2322: Type 'Deep' is not assignable to type 'Deep'. +!!! error TS2322: Type 'Deep' is not assignable to type 'Deep'. +!!! error TS2322: Type 'string' is not assignable to type 'number'. + const goodArray: Deep = array; + + declare const tuple: Deep<[[[[string]]]]>; + const badTuple: Deep<[[[[number]]]]> = tuple; + ~~~~~~~~ +!!! error TS2322: Type 'Deep<[[[[string]]]]>' is not assignable to type 'Deep<[[[[number]]]]>'. +!!! error TS2322: Type 'Deep<[[[string]]]>' is not assignable to type 'Deep<[[[number]]]>'. +!!! error TS2322: Type 'Deep<[[string]]>' is not assignable to type 'Deep<[[number]]>'. +!!! error TS2322: Type 'Deep<[string]>' is not assignable to type 'Deep<[number]>'. +!!! error TS2322: Type 'string' is not assignable to type 'number'. + const goodTuple: Deep<[[[[string]]]]> = tuple; + + declare const readonlyArray: DeepReadonly; + const badReadonlyArray: DeepReadonly = readonlyArray; + ~~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'DeepReadonly' is not assignable to type 'DeepReadonly'. +!!! error TS2322: Type 'DeepReadonly' is not assignable to type 'DeepReadonly'. +!!! error TS2322: Type 'DeepReadonly' is not assignable to type 'DeepReadonly'. +!!! error TS2322: Type 'DeepReadonly' is not assignable to type 'DeepReadonly'. +!!! error TS2322: Type 'string' is not assignable to type 'number'. + const goodReadonlyArray: DeepReadonly = readonlyArray; + + declare const readonlyTuple: DeepReadonly<[[[[string]]]]>; + const badReadonlyTuple: DeepReadonly<[[[[number]]]]> = readonlyTuple; + ~~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'DeepReadonly<[[[[string]]]]>' is not assignable to type 'DeepReadonly<[[[[number]]]]>'. +!!! error TS2322: Type 'DeepReadonly<[[[string]]]>' is not assignable to type 'DeepReadonly<[[[number]]]>'. +!!! error TS2322: Type 'DeepReadonly<[[string]]>' is not assignable to type 'DeepReadonly<[[number]]>'. +!!! error TS2322: Type 'DeepReadonly<[string]>' is not assignable to type 'DeepReadonly<[number]>'. +!!! error TS2322: Type 'string' is not assignable to type 'number'. + const goodReadonlyTuple: DeepReadonly<[[[[string]]]]> = readonlyTuple; + + type AssertFalse = T; + type ArrayRelation = AssertFalse extends Deep ? true : false>; + type TupleRelation = AssertFalse extends Deep<[[[[number]]]]> ? true : false>; + + declare function infer(value: Deep<{ value: T }[][][][]>): T; + declare const nested: Deep<{ value: number }[][][][]>; + const inferred: number = infer(nested); + const badInferred: string = infer(nested); + ~~~~~~~~~~~ +!!! error TS2322: Type 'number' is not assignable to type 'string'. + + type Growing = { [K in keyof T]: Growing }; + declare const growing: Growing; + const sameStructure: Growing = growing; + + type Previous = [never, 0, 1, 2, 3, 4]; + type Nest = { [K in keyof T]: D extends 0 ? T[K] : Nest }; + declare const boundedArray: Nest; + const badBoundedArray: Nest = boundedArray; + ~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'Nest' is not assignable to type 'Nest'. +!!! error TS2322: Type 'Nest' is not assignable to type 'Nest'. +!!! error TS2322: Type 'Nest' is not assignable to type 'Nest'. +!!! error TS2322: Type 'Nest' is not assignable to type 'Nest'. +!!! error TS2322: Type 'Nest' is not assignable to type 'Nest'. +!!! error TS2322: Type 'string' is not assignable to type 'number'. + const goodBoundedArray: Nest<(string | number)[], 4> = boundedArray; + declare const boundedTuple: Nest<[string], 4>; + const badBoundedTuple: Nest<[number], 4> = boundedTuple; + ~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'Nest<[string], 4>' is not assignable to type 'Nest<[number], 4>'. +!!! error TS2322: Type 'Nest<[string], 3>' is not assignable to type 'Nest<[number], 3>'. +!!! error TS2322: Type 'Nest<[string], 2>' is not assignable to type 'Nest<[number], 2>'. +!!! error TS2322: Type 'Nest<[string], 1>' is not assignable to type 'Nest<[number], 1>'. +!!! error TS2322: Type 'Nest<[string], 0>' is not assignable to type 'Nest<[number], 0>'. +!!! error TS2322: Type 'string' is not assignable to type 'number'. + const goodBoundedTuple: Nest<[string | number], 4> = boundedTuple; + type BoundedRelation = AssertFalse extends Nest<[number], 4> ? true : false>; + + interface Step { next: T } + type BuildChain = D extends 0 ? T : BuildChain>; + type ChainNest = { [K in keyof T]: D extends Step ? ChainNest : T[K] }; + declare const chain: ChainNest<[string], BuildChain<4>>; + const badChain: ChainNest<[number], BuildChain<4>> = chain; + ~~~~~~~~ +!!! error TS2322: Type 'ChainNest<[string], Step>>>>' is not assignable to type 'ChainNest<[number], Step>>>>'. +!!! error TS2322: Type 'ChainNest<[string], Step>>>' is not assignable to type 'ChainNest<[number], Step>>>'. +!!! error TS2322: Type 'ChainNest<[string], Step>>' is not assignable to type 'ChainNest<[number], Step>>'. +!!! error TS2322: Type 'ChainNest<[string], Step>' is not assignable to type 'ChainNest<[number], Step>'. +!!! error TS2322: Type 'ChainNest<[string], null>' is not assignable to type 'ChainNest<[number], null>'. +!!! error TS2322: Type 'string' is not assignable to type 'number'. + const goodChain: ChainNest<[string | number], BuildChain<4>> = chain; + type ChainRelation = AssertFalse> extends ChainNest<[number], BuildChain<4>> ? true : false>; + + type BuildArray = D extends 0 ? T : BuildArray; + declare const computedArray: Deep>; + const badComputedArray: Deep> = computedArray; + ~~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'Deep' is not assignable to type 'Deep'. +!!! error TS2322: Type 'Deep' is not assignable to type 'Deep'. +!!! error TS2322: Type 'Deep' is not assignable to type 'Deep'. +!!! error TS2322: Type 'Deep' is not assignable to type 'Deep'. +!!! error TS2322: Type 'string' is not assignable to type 'number'. + const goodComputedArray: Deep> = computedArray; + type ComputedRelation = AssertFalse> extends Deep> ? true : false>; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/deferredMappedTypeRelations.js b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeRelations.js new file mode 100644 index 0000000000000..d1f8d2fcf4da7 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeRelations.js @@ -0,0 +1,81 @@ +//// [tests/cases/compiler/deferredMappedTypeRelations.ts] //// + +//// [deferredMappedTypeRelations.ts] +type Deep = T extends object ? { [K in keyof T]: Deep } : T; +type DeepReadonly = T extends object ? { readonly [K in keyof T]: DeepReadonly } : T; + +declare const array: Deep; +const badArray: Deep = array; +const goodArray: Deep = array; + +declare const tuple: Deep<[[[[string]]]]>; +const badTuple: Deep<[[[[number]]]]> = tuple; +const goodTuple: Deep<[[[[string]]]]> = tuple; + +declare const readonlyArray: DeepReadonly; +const badReadonlyArray: DeepReadonly = readonlyArray; +const goodReadonlyArray: DeepReadonly = readonlyArray; + +declare const readonlyTuple: DeepReadonly<[[[[string]]]]>; +const badReadonlyTuple: DeepReadonly<[[[[number]]]]> = readonlyTuple; +const goodReadonlyTuple: DeepReadonly<[[[[string]]]]> = readonlyTuple; + +type AssertFalse = T; +type ArrayRelation = AssertFalse extends Deep ? true : false>; +type TupleRelation = AssertFalse extends Deep<[[[[number]]]]> ? true : false>; + +declare function infer(value: Deep<{ value: T }[][][][]>): T; +declare const nested: Deep<{ value: number }[][][][]>; +const inferred: number = infer(nested); +const badInferred: string = infer(nested); + +type Growing = { [K in keyof T]: Growing }; +declare const growing: Growing; +const sameStructure: Growing = growing; + +type Previous = [never, 0, 1, 2, 3, 4]; +type Nest = { [K in keyof T]: D extends 0 ? T[K] : Nest }; +declare const boundedArray: Nest; +const badBoundedArray: Nest = boundedArray; +const goodBoundedArray: Nest<(string | number)[], 4> = boundedArray; +declare const boundedTuple: Nest<[string], 4>; +const badBoundedTuple: Nest<[number], 4> = boundedTuple; +const goodBoundedTuple: Nest<[string | number], 4> = boundedTuple; +type BoundedRelation = AssertFalse extends Nest<[number], 4> ? true : false>; + +interface Step { next: T } +type BuildChain = D extends 0 ? T : BuildChain>; +type ChainNest = { [K in keyof T]: D extends Step ? ChainNest : T[K] }; +declare const chain: ChainNest<[string], BuildChain<4>>; +const badChain: ChainNest<[number], BuildChain<4>> = chain; +const goodChain: ChainNest<[string | number], BuildChain<4>> = chain; +type ChainRelation = AssertFalse> extends ChainNest<[number], BuildChain<4>> ? true : false>; + +type BuildArray = D extends 0 ? T : BuildArray; +declare const computedArray: Deep>; +const badComputedArray: Deep> = computedArray; +const goodComputedArray: Deep> = computedArray; +type ComputedRelation = AssertFalse> extends Deep> ? true : false>; + + +//// [deferredMappedTypeRelations.js] +"use strict"; +const badArray = array; +const goodArray = array; +const badTuple = tuple; +const goodTuple = tuple; +const badReadonlyArray = readonlyArray; +const goodReadonlyArray = readonlyArray; +const badReadonlyTuple = readonlyTuple; +const goodReadonlyTuple = readonlyTuple; +const inferred = infer(nested); +const badInferred = infer(nested); +const sameStructure = growing; +const badBoundedArray = boundedArray; +const goodBoundedArray = boundedArray; +const badBoundedTuple = boundedTuple; +const goodBoundedTuple = boundedTuple; +const badChain = chain; +const goodChain = chain; +const badComputedArray = computedArray; +const goodComputedArray = computedArray; diff --git a/tsc/testdata/baselines/reference/compiler/deferredMappedTypeRelations.symbols b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeRelations.symbols new file mode 100644 index 0000000000000..4501320981e73 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeRelations.symbols @@ -0,0 +1,284 @@ +//// [tests/cases/compiler/deferredMappedTypeRelations.ts] //// + +=== deferredMappedTypeRelations.ts === +type Deep = T extends object ? { [K in keyof T]: Deep } : T; +>Deep : Symbol(Deep, Decl(deferredMappedTypeRelations.ts, 0, 0)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 0, 10)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 0, 10)) +>K : Symbol(K, Decl(deferredMappedTypeRelations.ts, 0, 37)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 0, 10)) +>Deep : Symbol(Deep, Decl(deferredMappedTypeRelations.ts, 0, 0)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 0, 10)) +>K : Symbol(K, Decl(deferredMappedTypeRelations.ts, 0, 37)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 0, 10)) + +type DeepReadonly = T extends object ? { readonly [K in keyof T]: DeepReadonly } : T; +>DeepReadonly : Symbol(DeepReadonly, Decl(deferredMappedTypeRelations.ts, 0, 69)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 1, 18)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 1, 18)) +>K : Symbol(K, Decl(deferredMappedTypeRelations.ts, 1, 54)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 1, 18)) +>DeepReadonly : Symbol(DeepReadonly, Decl(deferredMappedTypeRelations.ts, 0, 69)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 1, 18)) +>K : Symbol(K, Decl(deferredMappedTypeRelations.ts, 1, 54)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 1, 18)) + +declare const array: Deep; +>array : Symbol(array, Decl(deferredMappedTypeRelations.ts, 3, 13)) +>Deep : Symbol(Deep, Decl(deferredMappedTypeRelations.ts, 0, 0)) + +const badArray: Deep = array; +>badArray : Symbol(badArray, Decl(deferredMappedTypeRelations.ts, 4, 5)) +>Deep : Symbol(Deep, Decl(deferredMappedTypeRelations.ts, 0, 0)) +>array : Symbol(array, Decl(deferredMappedTypeRelations.ts, 3, 13)) + +const goodArray: Deep = array; +>goodArray : Symbol(goodArray, Decl(deferredMappedTypeRelations.ts, 5, 5)) +>Deep : Symbol(Deep, Decl(deferredMappedTypeRelations.ts, 0, 0)) +>array : Symbol(array, Decl(deferredMappedTypeRelations.ts, 3, 13)) + +declare const tuple: Deep<[[[[string]]]]>; +>tuple : Symbol(tuple, Decl(deferredMappedTypeRelations.ts, 7, 13)) +>Deep : Symbol(Deep, Decl(deferredMappedTypeRelations.ts, 0, 0)) + +const badTuple: Deep<[[[[number]]]]> = tuple; +>badTuple : Symbol(badTuple, Decl(deferredMappedTypeRelations.ts, 8, 5)) +>Deep : Symbol(Deep, Decl(deferredMappedTypeRelations.ts, 0, 0)) +>tuple : Symbol(tuple, Decl(deferredMappedTypeRelations.ts, 7, 13)) + +const goodTuple: Deep<[[[[string]]]]> = tuple; +>goodTuple : Symbol(goodTuple, Decl(deferredMappedTypeRelations.ts, 9, 5)) +>Deep : Symbol(Deep, Decl(deferredMappedTypeRelations.ts, 0, 0)) +>tuple : Symbol(tuple, Decl(deferredMappedTypeRelations.ts, 7, 13)) + +declare const readonlyArray: DeepReadonly; +>readonlyArray : Symbol(readonlyArray, Decl(deferredMappedTypeRelations.ts, 11, 13)) +>DeepReadonly : Symbol(DeepReadonly, Decl(deferredMappedTypeRelations.ts, 0, 69)) + +const badReadonlyArray: DeepReadonly = readonlyArray; +>badReadonlyArray : Symbol(badReadonlyArray, Decl(deferredMappedTypeRelations.ts, 12, 5)) +>DeepReadonly : Symbol(DeepReadonly, Decl(deferredMappedTypeRelations.ts, 0, 69)) +>readonlyArray : Symbol(readonlyArray, Decl(deferredMappedTypeRelations.ts, 11, 13)) + +const goodReadonlyArray: DeepReadonly = readonlyArray; +>goodReadonlyArray : Symbol(goodReadonlyArray, Decl(deferredMappedTypeRelations.ts, 13, 5)) +>DeepReadonly : Symbol(DeepReadonly, Decl(deferredMappedTypeRelations.ts, 0, 69)) +>readonlyArray : Symbol(readonlyArray, Decl(deferredMappedTypeRelations.ts, 11, 13)) + +declare const readonlyTuple: DeepReadonly<[[[[string]]]]>; +>readonlyTuple : Symbol(readonlyTuple, Decl(deferredMappedTypeRelations.ts, 15, 13)) +>DeepReadonly : Symbol(DeepReadonly, Decl(deferredMappedTypeRelations.ts, 0, 69)) + +const badReadonlyTuple: DeepReadonly<[[[[number]]]]> = readonlyTuple; +>badReadonlyTuple : Symbol(badReadonlyTuple, Decl(deferredMappedTypeRelations.ts, 16, 5)) +>DeepReadonly : Symbol(DeepReadonly, Decl(deferredMappedTypeRelations.ts, 0, 69)) +>readonlyTuple : Symbol(readonlyTuple, Decl(deferredMappedTypeRelations.ts, 15, 13)) + +const goodReadonlyTuple: DeepReadonly<[[[[string]]]]> = readonlyTuple; +>goodReadonlyTuple : Symbol(goodReadonlyTuple, Decl(deferredMappedTypeRelations.ts, 17, 5)) +>DeepReadonly : Symbol(DeepReadonly, Decl(deferredMappedTypeRelations.ts, 0, 69)) +>readonlyTuple : Symbol(readonlyTuple, Decl(deferredMappedTypeRelations.ts, 15, 13)) + +type AssertFalse = T; +>AssertFalse : Symbol(AssertFalse, Decl(deferredMappedTypeRelations.ts, 17, 70)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 19, 17)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 19, 17)) + +type ArrayRelation = AssertFalse extends Deep ? true : false>; +>ArrayRelation : Symbol(ArrayRelation, Decl(deferredMappedTypeRelations.ts, 19, 38)) +>AssertFalse : Symbol(AssertFalse, Decl(deferredMappedTypeRelations.ts, 17, 70)) +>Deep : Symbol(Deep, Decl(deferredMappedTypeRelations.ts, 0, 0)) +>Deep : Symbol(Deep, Decl(deferredMappedTypeRelations.ts, 0, 0)) + +type TupleRelation = AssertFalse extends Deep<[[[[number]]]]> ? true : false>; +>TupleRelation : Symbol(TupleRelation, Decl(deferredMappedTypeRelations.ts, 20, 99)) +>AssertFalse : Symbol(AssertFalse, Decl(deferredMappedTypeRelations.ts, 17, 70)) +>Deep : Symbol(Deep, Decl(deferredMappedTypeRelations.ts, 0, 0)) +>Deep : Symbol(Deep, Decl(deferredMappedTypeRelations.ts, 0, 0)) + +declare function infer(value: Deep<{ value: T }[][][][]>): T; +>infer : Symbol(infer, Decl(deferredMappedTypeRelations.ts, 21, 99)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 23, 23)) +>value : Symbol(value, Decl(deferredMappedTypeRelations.ts, 23, 26)) +>Deep : Symbol(Deep, Decl(deferredMappedTypeRelations.ts, 0, 0)) +>value : Symbol(value, Decl(deferredMappedTypeRelations.ts, 23, 39)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 23, 23)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 23, 23)) + +declare const nested: Deep<{ value: number }[][][][]>; +>nested : Symbol(nested, Decl(deferredMappedTypeRelations.ts, 24, 13)) +>Deep : Symbol(Deep, Decl(deferredMappedTypeRelations.ts, 0, 0)) +>value : Symbol(value, Decl(deferredMappedTypeRelations.ts, 24, 28)) + +const inferred: number = infer(nested); +>inferred : Symbol(inferred, Decl(deferredMappedTypeRelations.ts, 25, 5)) +>infer : Symbol(infer, Decl(deferredMappedTypeRelations.ts, 21, 99)) +>nested : Symbol(nested, Decl(deferredMappedTypeRelations.ts, 24, 13)) + +const badInferred: string = infer(nested); +>badInferred : Symbol(badInferred, Decl(deferredMappedTypeRelations.ts, 26, 5)) +>infer : Symbol(infer, Decl(deferredMappedTypeRelations.ts, 21, 99)) +>nested : Symbol(nested, Decl(deferredMappedTypeRelations.ts, 24, 13)) + +type Growing = { [K in keyof T]: Growing }; +>Growing : Symbol(Growing, Decl(deferredMappedTypeRelations.ts, 26, 42)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 28, 13)) +>K : Symbol(K, Decl(deferredMappedTypeRelations.ts, 28, 21)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 28, 13)) +>Growing : Symbol(Growing, Decl(deferredMappedTypeRelations.ts, 26, 42)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 28, 13)) + +declare const growing: Growing; +>growing : Symbol(growing, Decl(deferredMappedTypeRelations.ts, 29, 13)) +>Growing : Symbol(Growing, Decl(deferredMappedTypeRelations.ts, 26, 42)) + +const sameStructure: Growing = growing; +>sameStructure : Symbol(sameStructure, Decl(deferredMappedTypeRelations.ts, 30, 5)) +>Growing : Symbol(Growing, Decl(deferredMappedTypeRelations.ts, 26, 42)) +>growing : Symbol(growing, Decl(deferredMappedTypeRelations.ts, 29, 13)) + +type Previous = [never, 0, 1, 2, 3, 4]; +>Previous : Symbol(Previous, Decl(deferredMappedTypeRelations.ts, 30, 49)) + +type Nest = { [K in keyof T]: D extends 0 ? T[K] : Nest }; +>Nest : Symbol(Nest, Decl(deferredMappedTypeRelations.ts, 32, 39)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 33, 10)) +>D : Symbol(D, Decl(deferredMappedTypeRelations.ts, 33, 12)) +>K : Symbol(K, Decl(deferredMappedTypeRelations.ts, 33, 36)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 33, 10)) +>D : Symbol(D, Decl(deferredMappedTypeRelations.ts, 33, 12)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 33, 10)) +>K : Symbol(K, Decl(deferredMappedTypeRelations.ts, 33, 36)) +>Nest : Symbol(Nest, Decl(deferredMappedTypeRelations.ts, 32, 39)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 33, 10)) +>Previous : Symbol(Previous, Decl(deferredMappedTypeRelations.ts, 30, 49)) +>D : Symbol(D, Decl(deferredMappedTypeRelations.ts, 33, 12)) + +declare const boundedArray: Nest; +>boundedArray : Symbol(boundedArray, Decl(deferredMappedTypeRelations.ts, 34, 13)) +>Nest : Symbol(Nest, Decl(deferredMappedTypeRelations.ts, 32, 39)) + +const badBoundedArray: Nest = boundedArray; +>badBoundedArray : Symbol(badBoundedArray, Decl(deferredMappedTypeRelations.ts, 35, 5)) +>Nest : Symbol(Nest, Decl(deferredMappedTypeRelations.ts, 32, 39)) +>boundedArray : Symbol(boundedArray, Decl(deferredMappedTypeRelations.ts, 34, 13)) + +const goodBoundedArray: Nest<(string | number)[], 4> = boundedArray; +>goodBoundedArray : Symbol(goodBoundedArray, Decl(deferredMappedTypeRelations.ts, 36, 5)) +>Nest : Symbol(Nest, Decl(deferredMappedTypeRelations.ts, 32, 39)) +>boundedArray : Symbol(boundedArray, Decl(deferredMappedTypeRelations.ts, 34, 13)) + +declare const boundedTuple: Nest<[string], 4>; +>boundedTuple : Symbol(boundedTuple, Decl(deferredMappedTypeRelations.ts, 37, 13)) +>Nest : Symbol(Nest, Decl(deferredMappedTypeRelations.ts, 32, 39)) + +const badBoundedTuple: Nest<[number], 4> = boundedTuple; +>badBoundedTuple : Symbol(badBoundedTuple, Decl(deferredMappedTypeRelations.ts, 38, 5)) +>Nest : Symbol(Nest, Decl(deferredMappedTypeRelations.ts, 32, 39)) +>boundedTuple : Symbol(boundedTuple, Decl(deferredMappedTypeRelations.ts, 37, 13)) + +const goodBoundedTuple: Nest<[string | number], 4> = boundedTuple; +>goodBoundedTuple : Symbol(goodBoundedTuple, Decl(deferredMappedTypeRelations.ts, 39, 5)) +>Nest : Symbol(Nest, Decl(deferredMappedTypeRelations.ts, 32, 39)) +>boundedTuple : Symbol(boundedTuple, Decl(deferredMappedTypeRelations.ts, 37, 13)) + +type BoundedRelation = AssertFalse extends Nest<[number], 4> ? true : false>; +>BoundedRelation : Symbol(BoundedRelation, Decl(deferredMappedTypeRelations.ts, 39, 66)) +>AssertFalse : Symbol(AssertFalse, Decl(deferredMappedTypeRelations.ts, 17, 70)) +>Nest : Symbol(Nest, Decl(deferredMappedTypeRelations.ts, 32, 39)) +>Nest : Symbol(Nest, Decl(deferredMappedTypeRelations.ts, 32, 39)) + +interface Step { next: T } +>Step : Symbol(Step, Decl(deferredMappedTypeRelations.ts, 40, 95)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 42, 15)) +>next : Symbol(Step.next, Decl(deferredMappedTypeRelations.ts, 42, 19)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 42, 15)) + +type BuildChain = D extends 0 ? T : BuildChain>; +>BuildChain : Symbol(BuildChain, Decl(deferredMappedTypeRelations.ts, 42, 29)) +>D : Symbol(D, Decl(deferredMappedTypeRelations.ts, 43, 16)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 43, 33)) +>D : Symbol(D, Decl(deferredMappedTypeRelations.ts, 43, 16)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 43, 33)) +>BuildChain : Symbol(BuildChain, Decl(deferredMappedTypeRelations.ts, 42, 29)) +>Previous : Symbol(Previous, Decl(deferredMappedTypeRelations.ts, 30, 49)) +>D : Symbol(D, Decl(deferredMappedTypeRelations.ts, 43, 16)) +>Step : Symbol(Step, Decl(deferredMappedTypeRelations.ts, 40, 95)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 43, 33)) + +type ChainNest = { [K in keyof T]: D extends Step ? ChainNest : T[K] }; +>ChainNest : Symbol(ChainNest, Decl(deferredMappedTypeRelations.ts, 43, 97)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 44, 15)) +>D : Symbol(D, Decl(deferredMappedTypeRelations.ts, 44, 17)) +>K : Symbol(K, Decl(deferredMappedTypeRelations.ts, 44, 26)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 44, 15)) +>D : Symbol(D, Decl(deferredMappedTypeRelations.ts, 44, 17)) +>Step : Symbol(Step, Decl(deferredMappedTypeRelations.ts, 40, 95)) +>R : Symbol(R, Decl(deferredMappedTypeRelations.ts, 44, 61)) +>ChainNest : Symbol(ChainNest, Decl(deferredMappedTypeRelations.ts, 43, 97)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 44, 15)) +>R : Symbol(R, Decl(deferredMappedTypeRelations.ts, 44, 61)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 44, 15)) +>K : Symbol(K, Decl(deferredMappedTypeRelations.ts, 44, 26)) + +declare const chain: ChainNest<[string], BuildChain<4>>; +>chain : Symbol(chain, Decl(deferredMappedTypeRelations.ts, 45, 13)) +>ChainNest : Symbol(ChainNest, Decl(deferredMappedTypeRelations.ts, 43, 97)) +>BuildChain : Symbol(BuildChain, Decl(deferredMappedTypeRelations.ts, 42, 29)) + +const badChain: ChainNest<[number], BuildChain<4>> = chain; +>badChain : Symbol(badChain, Decl(deferredMappedTypeRelations.ts, 46, 5)) +>ChainNest : Symbol(ChainNest, Decl(deferredMappedTypeRelations.ts, 43, 97)) +>BuildChain : Symbol(BuildChain, Decl(deferredMappedTypeRelations.ts, 42, 29)) +>chain : Symbol(chain, Decl(deferredMappedTypeRelations.ts, 45, 13)) + +const goodChain: ChainNest<[string | number], BuildChain<4>> = chain; +>goodChain : Symbol(goodChain, Decl(deferredMappedTypeRelations.ts, 47, 5)) +>ChainNest : Symbol(ChainNest, Decl(deferredMappedTypeRelations.ts, 43, 97)) +>BuildChain : Symbol(BuildChain, Decl(deferredMappedTypeRelations.ts, 42, 29)) +>chain : Symbol(chain, Decl(deferredMappedTypeRelations.ts, 45, 13)) + +type ChainRelation = AssertFalse> extends ChainNest<[number], BuildChain<4>> ? true : false>; +>ChainRelation : Symbol(ChainRelation, Decl(deferredMappedTypeRelations.ts, 47, 69)) +>AssertFalse : Symbol(AssertFalse, Decl(deferredMappedTypeRelations.ts, 17, 70)) +>ChainNest : Symbol(ChainNest, Decl(deferredMappedTypeRelations.ts, 43, 97)) +>BuildChain : Symbol(BuildChain, Decl(deferredMappedTypeRelations.ts, 42, 29)) +>ChainNest : Symbol(ChainNest, Decl(deferredMappedTypeRelations.ts, 43, 97)) +>BuildChain : Symbol(BuildChain, Decl(deferredMappedTypeRelations.ts, 42, 29)) + +type BuildArray = D extends 0 ? T : BuildArray; +>BuildArray : Symbol(BuildArray, Decl(deferredMappedTypeRelations.ts, 48, 127)) +>D : Symbol(D, Decl(deferredMappedTypeRelations.ts, 50, 16)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 50, 33)) +>D : Symbol(D, Decl(deferredMappedTypeRelations.ts, 50, 16)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 50, 33)) +>BuildArray : Symbol(BuildArray, Decl(deferredMappedTypeRelations.ts, 48, 127)) +>Previous : Symbol(Previous, Decl(deferredMappedTypeRelations.ts, 30, 49)) +>D : Symbol(D, Decl(deferredMappedTypeRelations.ts, 50, 16)) +>T : Symbol(T, Decl(deferredMappedTypeRelations.ts, 50, 33)) + +declare const computedArray: Deep>; +>computedArray : Symbol(computedArray, Decl(deferredMappedTypeRelations.ts, 51, 13)) +>Deep : Symbol(Deep, Decl(deferredMappedTypeRelations.ts, 0, 0)) +>BuildArray : Symbol(BuildArray, Decl(deferredMappedTypeRelations.ts, 48, 127)) + +const badComputedArray: Deep> = computedArray; +>badComputedArray : Symbol(badComputedArray, Decl(deferredMappedTypeRelations.ts, 52, 5)) +>Deep : Symbol(Deep, Decl(deferredMappedTypeRelations.ts, 0, 0)) +>BuildArray : Symbol(BuildArray, Decl(deferredMappedTypeRelations.ts, 48, 127)) +>computedArray : Symbol(computedArray, Decl(deferredMappedTypeRelations.ts, 51, 13)) + +const goodComputedArray: Deep> = computedArray; +>goodComputedArray : Symbol(goodComputedArray, Decl(deferredMappedTypeRelations.ts, 53, 5)) +>Deep : Symbol(Deep, Decl(deferredMappedTypeRelations.ts, 0, 0)) +>BuildArray : Symbol(BuildArray, Decl(deferredMappedTypeRelations.ts, 48, 127)) +>computedArray : Symbol(computedArray, Decl(deferredMappedTypeRelations.ts, 51, 13)) + +type ComputedRelation = AssertFalse> extends Deep> ? true : false>; +>ComputedRelation : Symbol(ComputedRelation, Decl(deferredMappedTypeRelations.ts, 53, 78)) +>AssertFalse : Symbol(AssertFalse, Decl(deferredMappedTypeRelations.ts, 17, 70)) +>Deep : Symbol(Deep, Decl(deferredMappedTypeRelations.ts, 0, 0)) +>BuildArray : Symbol(BuildArray, Decl(deferredMappedTypeRelations.ts, 48, 127)) +>Deep : Symbol(Deep, Decl(deferredMappedTypeRelations.ts, 0, 0)) +>BuildArray : Symbol(BuildArray, Decl(deferredMappedTypeRelations.ts, 48, 127)) + diff --git a/tsc/testdata/baselines/reference/compiler/deferredMappedTypeRelations.types b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeRelations.types new file mode 100644 index 0000000000000..823271ce52cc5 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/deferredMappedTypeRelations.types @@ -0,0 +1,175 @@ +//// [tests/cases/compiler/deferredMappedTypeRelations.ts] //// + +=== deferredMappedTypeRelations.ts === +type Deep = T extends object ? { [K in keyof T]: Deep } : T; +>Deep : Deep + +type DeepReadonly = T extends object ? { readonly [K in keyof T]: DeepReadonly } : T; +>DeepReadonly : DeepReadonly + +declare const array: Deep; +>array : Deep + +const badArray: Deep = array; +>badArray : Deep +>array : Deep + +const goodArray: Deep = array; +>goodArray : Deep +>array : Deep + +declare const tuple: Deep<[[[[string]]]]>; +>tuple : Deep<[[[[string]]]]> + +const badTuple: Deep<[[[[number]]]]> = tuple; +>badTuple : Deep<[[[[number]]]]> +>tuple : Deep<[[[[string]]]]> + +const goodTuple: Deep<[[[[string]]]]> = tuple; +>goodTuple : Deep<[[[[string]]]]> +>tuple : Deep<[[[[string]]]]> + +declare const readonlyArray: DeepReadonly; +>readonlyArray : DeepReadonly + +const badReadonlyArray: DeepReadonly = readonlyArray; +>badReadonlyArray : DeepReadonly +>readonlyArray : DeepReadonly + +const goodReadonlyArray: DeepReadonly = readonlyArray; +>goodReadonlyArray : DeepReadonly +>readonlyArray : DeepReadonly + +declare const readonlyTuple: DeepReadonly<[[[[string]]]]>; +>readonlyTuple : DeepReadonly<[[[[string]]]]> + +const badReadonlyTuple: DeepReadonly<[[[[number]]]]> = readonlyTuple; +>badReadonlyTuple : DeepReadonly<[[[[number]]]]> +>readonlyTuple : DeepReadonly<[[[[string]]]]> + +const goodReadonlyTuple: DeepReadonly<[[[[string]]]]> = readonlyTuple; +>goodReadonlyTuple : DeepReadonly<[[[[string]]]]> +>readonlyTuple : DeepReadonly<[[[[string]]]]> + +type AssertFalse = T; +>AssertFalse : T +>false : false + +type ArrayRelation = AssertFalse extends Deep ? true : false>; +>ArrayRelation : false +>true : true +>false : false + +type TupleRelation = AssertFalse extends Deep<[[[[number]]]]> ? true : false>; +>TupleRelation : false +>true : true +>false : false + +declare function infer(value: Deep<{ value: T }[][][][]>): T; +>infer : (value: Deep<{ value: T; }[][][][]>) => T +>value : Deep<{ value: T; }[][][][]> +>value : T + +declare const nested: Deep<{ value: number }[][][][]>; +>nested : Deep<{ value: number; }[][][][]> +>value : number + +const inferred: number = infer(nested); +>inferred : number +>infer(nested) : number +>infer : (value: Deep<{ value: T; }[][][][]>) => T +>nested : Deep<{ value: number; }[][][][]> + +const badInferred: string = infer(nested); +>badInferred : string +>infer(nested) : number +>infer : (value: Deep<{ value: T; }[][][][]>) => T +>nested : Deep<{ value: number; }[][][][]> + +type Growing = { [K in keyof T]: Growing }; +>Growing : Growing + +declare const growing: Growing; +>growing : Growing + +const sameStructure: Growing = growing; +>sameStructure : Growing +>growing : Growing + +type Previous = [never, 0, 1, 2, 3, 4]; +>Previous : Previous + +type Nest = { [K in keyof T]: D extends 0 ? T[K] : Nest }; +>Nest : Nest + +declare const boundedArray: Nest; +>boundedArray : Nest + +const badBoundedArray: Nest = boundedArray; +>badBoundedArray : Nest +>boundedArray : Nest + +const goodBoundedArray: Nest<(string | number)[], 4> = boundedArray; +>goodBoundedArray : Nest<(string | number)[], 4> +>boundedArray : Nest + +declare const boundedTuple: Nest<[string], 4>; +>boundedTuple : Nest<[string], 4> + +const badBoundedTuple: Nest<[number], 4> = boundedTuple; +>badBoundedTuple : Nest<[number], 4> +>boundedTuple : Nest<[string], 4> + +const goodBoundedTuple: Nest<[string | number], 4> = boundedTuple; +>goodBoundedTuple : Nest<[string | number], 4> +>boundedTuple : Nest<[string], 4> + +type BoundedRelation = AssertFalse extends Nest<[number], 4> ? true : false>; +>BoundedRelation : false +>true : true +>false : false + +interface Step { next: T } +>next : T + +type BuildChain = D extends 0 ? T : BuildChain>; +>BuildChain : BuildChain + +type ChainNest = { [K in keyof T]: D extends Step ? ChainNest : T[K] }; +>ChainNest : ChainNest + +declare const chain: ChainNest<[string], BuildChain<4>>; +>chain : ChainNest<[string], Step>>>> + +const badChain: ChainNest<[number], BuildChain<4>> = chain; +>badChain : ChainNest<[number], Step>>>> +>chain : ChainNest<[string], Step>>>> + +const goodChain: ChainNest<[string | number], BuildChain<4>> = chain; +>goodChain : ChainNest<[string | number], Step>>>> +>chain : ChainNest<[string], Step>>>> + +type ChainRelation = AssertFalse> extends ChainNest<[number], BuildChain<4>> ? true : false>; +>ChainRelation : false +>true : true +>false : false + +type BuildArray = D extends 0 ? T : BuildArray; +>BuildArray : BuildArray + +declare const computedArray: Deep>; +>computedArray : Deep + +const badComputedArray: Deep> = computedArray; +>badComputedArray : Deep +>computedArray : Deep + +const goodComputedArray: Deep> = computedArray; +>goodComputedArray : Deep<(string | number)[][][][]> +>computedArray : Deep + +type ComputedRelation = AssertFalse> extends Deep> ? true : false>; +>ComputedRelation : false +>true : true +>false : false + diff --git a/tsc/testdata/baselines/reference/compiler/emitClassExpressionInDeclarationFile.errors.txt b/tsc/testdata/baselines/reference/compiler/emitClassExpressionInDeclarationFile.errors.txt new file mode 100644 index 0000000000000..4f2b2899d9424 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/emitClassExpressionInDeclarationFile.errors.txt @@ -0,0 +1,36 @@ +emitClassExpressionInDeclarationFile.ts(5,12): error TS5088: The inferred type of 'circularReference' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + + +==== emitClassExpressionInDeclarationFile.ts (1 errors) ==== + export var simpleExample = class { + static getTags() { } + tags() { } + } + export var circularReference = class C { + ~~~~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'circularReference' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + static getTags(c: C): C { return c } + tags(c: C): C { return c } + } + + // repro from #15066 + export class FooItem { + foo(): void { } + name?: string; + } + + export type Constructor = new(...args: any[]) => T; + export function WithTags>(Base: T) { + return class extends Base { + static getTags(): void { } + tags(): void { } + } + } + + export class Test extends WithTags(FooItem) {} + + const test = new Test(); + + Test.getTags() + test.tags(); + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/emitClassExpressionInDeclarationFile.js b/tsc/testdata/baselines/reference/compiler/emitClassExpressionInDeclarationFile.js index 30ce8bf51466b..5fb0a6eb4a94c 100644 --- a/tsc/testdata/baselines/reference/compiler/emitClassExpressionInDeclarationFile.js +++ b/tsc/testdata/baselines/reference/compiler/emitClassExpressionInDeclarationFile.js @@ -64,46 +64,3 @@ exports.Test = Test; const test = new Test(); Test.getTags(); test.tags(); - - -//// [emitClassExpressionInDeclarationFile.d.ts] -export declare var simpleExample: { - new (): { - tags(): void; - }; - getTags(): void; -}; -export declare var circularReference: { - new (): { - tags(c: /*elided*/ any): /*elided*/ any; - }; - getTags(c: { - tags(c: /*elided*/ any): /*elided*/ any; - }): { - tags(c: any): any; - }; -}; -export declare class FooItem { - foo(): void; - name?: string; -} -export type Constructor = new (...args: any[]) => T; -export declare function WithTags>(Base: T): { - new (...args: any[]): { - tags(): void; - foo(): void; - name?: string; - }; - getTags(): void; -} & T; -declare const Test_base: { - new (...args: any[]): { - tags(): void; - foo(): void; - name?: string; - }; - getTags(): void; -} & typeof FooItem; -export declare class Test extends Test_base { -} -export {}; diff --git a/tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.js b/tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.js index 279364408b5e4..567455a7bd0b4 100644 --- a/tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.js +++ b/tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.js @@ -9,4 +9,4 @@ var x = function somefn() { return somefn; }; //// [functionExpressionReturningItself.d.ts] -declare var x: () => () => /*elided*/ any; +declare var x: () => typeof x; diff --git a/tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.types b/tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.types index c4efe2bcbae55..20ac6cf3cdd92 100644 --- a/tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.types +++ b/tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.types @@ -2,8 +2,8 @@ === functionExpressionReturningItself.ts === var x = function somefn() { return somefn; }; ->x : () => typeof somefn ->function somefn() { return somefn; } : () => typeof somefn +>x : () => typeof x +>function somefn() { return somefn; } : () => typeof x >somefn : () => typeof x >somefn : () => typeof x diff --git a/tsc/testdata/baselines/reference/compiler/inferRestArgumentsMappedTuple.types b/tsc/testdata/baselines/reference/compiler/inferRestArgumentsMappedTuple.types index d7a48e2d873ed..612b447f57a8e 100644 --- a/tsc/testdata/baselines/reference/compiler/inferRestArgumentsMappedTuple.types +++ b/tsc/testdata/baselines/reference/compiler/inferRestArgumentsMappedTuple.types @@ -16,7 +16,7 @@ type TupleMapperOld = { }; type MyMappedTupleOld = TupleMapperOld<[string, number]>; // [MyMappedType, MyMappedType] ->MyMappedTupleOld : [MyMappedType, MyMappedType] +>MyMappedTupleOld : MyMappedTupleOld declare function extractPrimitivesOld(...mappedTypes: TupleMapperOld): Tuple; >extractPrimitivesOld : (...mappedTypes: TupleMapperOld) => Tuple @@ -40,7 +40,7 @@ type TupleMapperNew = { }; type MyMappedTupleNew = TupleMapperNew<[string, number]>; ->MyMappedTupleNew : [MyMappedType, MyMappedType] +>MyMappedTupleNew : MyMappedTupleNew declare function extractPrimitivesNew(...mappedTypes: TupleMapperNew): Tuple; >extractPrimitivesNew : (...mappedTypes: TupleMapperNew) => Tuple diff --git a/tsc/testdata/baselines/reference/compiler/mappedArrayTupleIntersections.types b/tsc/testdata/baselines/reference/compiler/mappedArrayTupleIntersections.types index db4a465853fc9..0ec25f1f69f1f 100644 --- a/tsc/testdata/baselines/reference/compiler/mappedArrayTupleIntersections.types +++ b/tsc/testdata/baselines/reference/compiler/mappedArrayTupleIntersections.types @@ -9,16 +9,16 @@ type Boxify = { [K in keyof T]: Box }; >Boxify : Boxify type T1 = Boxify; ->T1 : Box[] +>T1 : T1 type T2 = Boxify<[string, string]>; ->T2 : [Box, Box] +>T2 : T2 type T3 = Boxify; ->T3 : Box[] & Box[] +>T3 : Boxify & Boxify type T4 = Boxify; ->T4 : Box[] & [Box, Box] +>T4 : Boxify & Boxify<[string, string]> type T5 = Boxify; >T5 : Boxify @@ -36,5 +36,5 @@ type Hmm = T extends number[] ? never; type X = Hmm<[3, 4, 5]>; ->X : [1, 1, 1] +>X : X diff --git a/tsc/testdata/baselines/reference/compiler/mappedTupleInstantiationSharing.js b/tsc/testdata/baselines/reference/compiler/mappedTupleInstantiationSharing.js new file mode 100644 index 0000000000000..652a26e99174f --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/mappedTupleInstantiationSharing.js @@ -0,0 +1,16 @@ +//// [tests/cases/compiler/mappedTupleInstantiationSharing.ts] //// + +//// [mappedTupleInstantiationSharing.ts] +type Select = { [K in keyof I]: T[I[K]] }; +interface Box { + value: T; + callback: (...args: T) => T; +} +type Boxes = Tag extends unknown ? Box> : never; +declare const boxes: Boxes<0 | 1 | 2 | 3 | 4 | 5 | 6 | 7>; +const result: [string] = boxes.callback("hello"); + + +//// [mappedTupleInstantiationSharing.js] +"use strict"; +const result = boxes.callback("hello"); diff --git a/tsc/testdata/baselines/reference/compiler/mappedTupleInstantiationSharing.symbols b/tsc/testdata/baselines/reference/compiler/mappedTupleInstantiationSharing.symbols new file mode 100644 index 0000000000000..ff3f070eaa030 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/mappedTupleInstantiationSharing.symbols @@ -0,0 +1,46 @@ +//// [tests/cases/compiler/mappedTupleInstantiationSharing.ts] //// + +=== mappedTupleInstantiationSharing.ts === +type Select = { [K in keyof I]: T[I[K]] }; +>Select : Symbol(Select, Decl(mappedTupleInstantiationSharing.ts, 0, 0)) +>T : Symbol(T, Decl(mappedTupleInstantiationSharing.ts, 0, 12)) +>I : Symbol(I, Decl(mappedTupleInstantiationSharing.ts, 0, 14)) +>T : Symbol(T, Decl(mappedTupleInstantiationSharing.ts, 0, 12)) +>K : Symbol(K, Decl(mappedTupleInstantiationSharing.ts, 0, 43)) +>I : Symbol(I, Decl(mappedTupleInstantiationSharing.ts, 0, 14)) +>T : Symbol(T, Decl(mappedTupleInstantiationSharing.ts, 0, 12)) +>I : Symbol(I, Decl(mappedTupleInstantiationSharing.ts, 0, 14)) +>K : Symbol(K, Decl(mappedTupleInstantiationSharing.ts, 0, 43)) + +interface Box { +>Box : Symbol(Box, Decl(mappedTupleInstantiationSharing.ts, 0, 68)) +>T : Symbol(T, Decl(mappedTupleInstantiationSharing.ts, 1, 14)) + + value: T; +>value : Symbol(Box.value, Decl(mappedTupleInstantiationSharing.ts, 1, 36)) +>T : Symbol(T, Decl(mappedTupleInstantiationSharing.ts, 1, 14)) + + callback: (...args: T) => T; +>callback : Symbol(Box.callback, Decl(mappedTupleInstantiationSharing.ts, 2, 13)) +>args : Symbol(args, Decl(mappedTupleInstantiationSharing.ts, 3, 15)) +>T : Symbol(T, Decl(mappedTupleInstantiationSharing.ts, 1, 14)) +>T : Symbol(T, Decl(mappedTupleInstantiationSharing.ts, 1, 14)) +} +type Boxes = Tag extends unknown ? Box> : never; +>Boxes : Symbol(Boxes, Decl(mappedTupleInstantiationSharing.ts, 4, 1)) +>Tag : Symbol(Tag, Decl(mappedTupleInstantiationSharing.ts, 5, 11)) +>Tag : Symbol(Tag, Decl(mappedTupleInstantiationSharing.ts, 5, 11)) +>Box : Symbol(Box, Decl(mappedTupleInstantiationSharing.ts, 0, 68)) +>Select : Symbol(Select, Decl(mappedTupleInstantiationSharing.ts, 0, 0)) +>Tag : Symbol(Tag, Decl(mappedTupleInstantiationSharing.ts, 5, 11)) + +declare const boxes: Boxes<0 | 1 | 2 | 3 | 4 | 5 | 6 | 7>; +>boxes : Symbol(boxes, Decl(mappedTupleInstantiationSharing.ts, 6, 13)) +>Boxes : Symbol(Boxes, Decl(mappedTupleInstantiationSharing.ts, 4, 1)) + +const result: [string] = boxes.callback("hello"); +>result : Symbol(result, Decl(mappedTupleInstantiationSharing.ts, 7, 5)) +>boxes.callback : Symbol(Box.callback, Decl(mappedTupleInstantiationSharing.ts, 2, 13)) +>boxes : Symbol(boxes, Decl(mappedTupleInstantiationSharing.ts, 6, 13)) +>callback : Symbol(Box.callback, Decl(mappedTupleInstantiationSharing.ts, 2, 13)) + diff --git a/tsc/testdata/baselines/reference/compiler/mappedTupleInstantiationSharing.types b/tsc/testdata/baselines/reference/compiler/mappedTupleInstantiationSharing.types new file mode 100644 index 0000000000000..1910c28a40a4c --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/mappedTupleInstantiationSharing.types @@ -0,0 +1,28 @@ +//// [tests/cases/compiler/mappedTupleInstantiationSharing.ts] //// + +=== mappedTupleInstantiationSharing.ts === +type Select = { [K in keyof I]: T[I[K]] }; +>Select : Select + +interface Box { + value: T; +>value : T + + callback: (...args: T) => T; +>callback : (...args: T) => T +>args : T +} +type Boxes = Tag extends unknown ? Box> : never; +>Boxes : Boxes + +declare const boxes: Boxes<0 | 1 | 2 | 3 | 4 | 5 | 6 | 7>; +>boxes : Box> | Box> | Box> | Box> | Box> | Box> | Box> | Box> + +const result: [string] = boxes.callback("hello"); +>result : [string] +>boxes.callback("hello") : [string] +>boxes.callback : (args_0: string) => [string] +>boxes : Box> | Box> | Box> | Box> | Box> | Box> | Box> | Box> +>callback : (args_0: string) => [string] +>"hello" : "hello" + diff --git a/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.errors.txt b/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.errors.txt new file mode 100644 index 0000000000000..f4a4732e45395 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.errors.txt @@ -0,0 +1,57 @@ +noImplicitThisBigThis.ts(3,10): error TS5088: The inferred type of 'createObj' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +noImplicitThisBigThis.ts(17,10): error TS5088: The inferred type of 'createObjNoCrash' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + + +==== noImplicitThisBigThis.ts (2 errors) ==== + // https://github.com/microsoft/TypeScript/issues/29902 + + function createObj() { + ~~~~~~~~~ +!!! error TS5088: The inferred type of 'createObj' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + return { + func1() { + return this; + }, + func2() { + return this; + }, + func3() { + return this; + } + }; + } + + function createObjNoCrash() { + ~~~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'createObjNoCrash' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + return { + func1() { + return this; + }, + func2() { + return this; + }, + func3() { + return this; + }, + func4() { + return this; + }, + func5() { + return this; + }, + func6() { + return this; + }, + func7() { + return this; + }, + func8() { + return this; + }, + func9() { + return this; + } + }; + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.js b/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.js index 5d48542f0ae8e..57b0614056a9f 100644 --- a/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.js +++ b/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.js @@ -97,124 +97,3 @@ function createObjNoCrash() { } }; } - - -//// [noImplicitThisBigThis.d.ts] -declare function createObj(): { - func1(): { - func1(): /*elided*/ any; - func2(): /*elided*/ any; - func3(): /*elided*/ any; - }; - func2(): { - func1(): any; - func2(): any; - func3(): any; - }; - func3(): { - func1(): any; - func2(): any; - func3(): any; - }; -}; -declare function createObjNoCrash(): { - func1(): { - func1(): /*elided*/ any; - func2(): /*elided*/ any; - func3(): /*elided*/ any; - func4(): /*elided*/ any; - func5(): /*elided*/ any; - func6(): /*elided*/ any; - func7(): /*elided*/ any; - func8(): /*elided*/ any; - func9(): /*elided*/ any; - }; - func2(): { - func1(): any; - func2(): any; - func3(): any; - func4(): any; - func5(): any; - func6(): any; - func7(): any; - func8(): any; - func9(): any; - }; - func3(): { - func1(): any; - func2(): any; - func3(): any; - func4(): any; - func5(): any; - func6(): any; - func7(): any; - func8(): any; - func9(): any; - }; - func4(): { - func1(): any; - func2(): any; - func3(): any; - func4(): any; - func5(): any; - func6(): any; - func7(): any; - func8(): any; - func9(): any; - }; - func5(): { - func1(): any; - func2(): any; - func3(): any; - func4(): any; - func5(): any; - func6(): any; - func7(): any; - func8(): any; - func9(): any; - }; - func6(): { - func1(): any; - func2(): any; - func3(): any; - func4(): any; - func5(): any; - func6(): any; - func7(): any; - func8(): any; - func9(): any; - }; - func7(): { - func1(): any; - func2(): any; - func3(): any; - func4(): any; - func5(): any; - func6(): any; - func7(): any; - func8(): any; - func9(): any; - }; - func8(): { - func1(): any; - func2(): any; - func3(): any; - func4(): any; - func5(): any; - func6(): any; - func7(): any; - func8(): any; - func9(): any; - }; - func9(): { - func1(): any; - func2(): any; - func3(): any; - func4(): any; - func5(): any; - func6(): any; - func7(): any; - func8(): any; - func9(): any; - }; -}; diff --git a/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.types b/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.types index 45208b519ab4c..492db73b76355 100644 --- a/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.types +++ b/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.types @@ -4,7 +4,7 @@ // https://github.com/microsoft/TypeScript/issues/29902 function createObj() { ->createObj : () => { func1(): { func1(): any; func2(): any; func3(): any; }; func2(): { func1(): any; func2(): any; func3(): any; }; func3(): { func1(): any; func2(): any; func3(): any; }; } +>createObj : () => { func1(): any; func2(): any; func3(): any; } return { >{ func1() { return this; }, func2() { return this; }, func3() { return this; } } : { func1(): { func1(): any; func2(): any; func3(): any; }; func2(): { func1(): any; func2(): any; func3(): any; }; func3(): { func1(): any; func2(): any; func3(): any; }; } @@ -33,7 +33,7 @@ function createObj() { } function createObjNoCrash() { ->createObjNoCrash : () => { func1(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func2(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func3(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func4(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func5(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func6(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func7(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func8(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func9(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; } +>createObjNoCrash : () => { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } return { >{ func1() { return this; }, func2() { return this; }, func3() { return this; }, func4() { return this; }, func5() { return this; }, func6() { return this; }, func7() { return this; }, func8() { return this; }, func9() { return this; } } : { func1(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func2(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func3(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func4(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func5(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func6(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func7(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func8(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func9(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; } diff --git a/tsc/testdata/baselines/reference/compiler/objectFreeze.errors.txt b/tsc/testdata/baselines/reference/compiler/objectFreeze.errors.txt index c4d9eb46917b5..b0826ae9df4ee 100644 --- a/tsc/testdata/baselines/reference/compiler/objectFreeze.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/objectFreeze.errors.txt @@ -1,5 +1,5 @@ objectFreeze.ts(9,1): error TS2322: Type 'string' is not assignable to type 'number'. -objectFreeze.ts(9,1): error TS2542: Index signature in type 'readonly number[]' only permits reading. +objectFreeze.ts(9,1): error TS2542: Index signature in type 'Readonly' only permits reading. objectFreeze.ts(12,3): error TS2540: Cannot assign to 'b' because it is a read-only property. @@ -16,7 +16,7 @@ objectFreeze.ts(12,3): error TS2540: Cannot assign to 'b' because it is a read-o ~~~~ !!! error TS2322: Type 'string' is not assignable to type 'number'. ~~~~ -!!! error TS2542: Index signature in type 'readonly number[]' only permits reading. +!!! error TS2542: Index signature in type 'Readonly' only permits reading. const o = Object.freeze({ a: 1, b: "string", c: true }); o.b = o.a.toString(); diff --git a/tsc/testdata/baselines/reference/compiler/objectFreeze.types b/tsc/testdata/baselines/reference/compiler/objectFreeze.types index 83c3f88fc4f61..dac7bd65dee15 100644 --- a/tsc/testdata/baselines/reference/compiler/objectFreeze.types +++ b/tsc/testdata/baselines/reference/compiler/objectFreeze.types @@ -39,8 +39,8 @@ new c(1); >1 : 1 const a = Object.freeze([1, 2, 3]); ->a : readonly number[] ->Object.freeze([1, 2, 3]) : readonly number[] +>a : Readonly +>Object.freeze([1, 2, 3]) : Readonly >Object.freeze : { (f: T): T; (o: T): Readonly; (o: T): Readonly; } >Object : ObjectConstructor >freeze : { (f: T): T; (o: T): Readonly; (o: T): Readonly; } @@ -52,12 +52,12 @@ const a = Object.freeze([1, 2, 3]); a[0] = a[2].toString(); >a[0] = a[2].toString() : string >a[0] : number ->a : readonly number[] +>a : Readonly >0 : 0 >a[2].toString() : string >a[2].toString : (radix?: number) => string >a[2] : number ->a : readonly number[] +>a : Readonly >2 : 2 >toString : (radix?: number) => string diff --git a/tsc/testdata/baselines/reference/compiler/objectFromEntries.types b/tsc/testdata/baselines/reference/compiler/objectFromEntries.types index 09584f842c480..d146aa11ce2d6 100644 --- a/tsc/testdata/baselines/reference/compiler/objectFromEntries.types +++ b/tsc/testdata/baselines/reference/compiler/objectFromEntries.types @@ -43,8 +43,8 @@ const o3 = Object.fromEntries(new Map([[Symbol("key"), "value"]])); >"value" : "value" const frozenArray = Object.freeze([['a', 1], ['b', 2], ['c', 3]]); ->frozenArray : readonly (string | number)[][] ->Object.freeze([['a', 1], ['b', 2], ['c', 3]]) : readonly (string | number)[][] +>frozenArray : Readonly<(string | number)[][]> +>Object.freeze([['a', 1], ['b', 2], ['c', 3]]) : Readonly<(string | number)[][]> >Object.freeze : { (f: T): T; (o: T): Readonly; (o: T): Readonly; } >Object : ObjectConstructor >freeze : { (f: T): T; (o: T): Readonly; (o: T): Readonly; } @@ -65,11 +65,11 @@ const o4 = Object.fromEntries(frozenArray); >Object.fromEntries : { (entries: Iterable): { [k: string]: T; }; (entries: Iterable): any; } >Object : ObjectConstructor >fromEntries : { (entries: Iterable): { [k: string]: T; }; (entries: Iterable): any; } ->frozenArray : readonly (string | number)[][] +>frozenArray : Readonly<(string | number)[][]> const frozenArray2: readonly [string, number][] = Object.freeze([['a', 1], ['b', 2], ['c', 3]]); >frozenArray2 : readonly [string, number][] ->Object.freeze([['a', 1], ['b', 2], ['c', 3]]) : readonly [string, number][] +>Object.freeze([['a', 1], ['b', 2], ['c', 3]]) : Readonly<[string, number][]> >Object.freeze : { (f: T): T; (o: T): Readonly; (o: T): Readonly; } >Object : ObjectConstructor >freeze : { (f: T): T; (o: T): Readonly; (o: T): Readonly; } diff --git a/tsc/testdata/baselines/reference/compiler/optionalTupleElementsAndUndefined.types b/tsc/testdata/baselines/reference/compiler/optionalTupleElementsAndUndefined.types index e3bf963683c52..c38b1749a20ff 100644 --- a/tsc/testdata/baselines/reference/compiler/optionalTupleElementsAndUndefined.types +++ b/tsc/testdata/baselines/reference/compiler/optionalTupleElementsAndUndefined.types @@ -7,7 +7,7 @@ type UnNullify = { [K in keyof T]: NonNullable }; >UnNullify : UnNullify type Foo = UnNullify<[a: 1, b?: 2 | undefined]>; ->Foo : [a: 1, b?: 2 | undefined] +>Foo : Foo type Test = [a: 1, b?: 2] extends Foo ? true : false; // true >Test : true diff --git a/tsc/testdata/baselines/reference/compiler/readonlyTupleAndArrayElaboration.errors.txt b/tsc/testdata/baselines/reference/compiler/readonlyTupleAndArrayElaboration.errors.txt index a4f153289ab85..f73ae4906c617 100644 --- a/tsc/testdata/baselines/reference/compiler/readonlyTupleAndArrayElaboration.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/readonlyTupleAndArrayElaboration.errors.txt @@ -2,7 +2,7 @@ readonlyTupleAndArrayElaboration.ts(10,20): error TS4104: The type 'readonly [3, readonlyTupleAndArrayElaboration.ts(13,8): error TS4104: The type 'readonly [3, 4]' is 'readonly' and cannot be assigned to the mutable type 'number[]'. readonlyTupleAndArrayElaboration.ts(16,9): error TS4104: The type 'readonly [3, 4]' is 'readonly' and cannot be assigned to the mutable type 'number[]'. readonlyTupleAndArrayElaboration.ts(22,9): error TS4104: The type 'readonly number[]' is 'readonly' and cannot be assigned to the mutable type 'number[]'. -readonlyTupleAndArrayElaboration.ts(23,9): error TS4104: The type 'readonly number[]' is 'readonly' and cannot be assigned to the mutable type 'number[]'. +readonlyTupleAndArrayElaboration.ts(23,9): error TS4104: The type 'Readonly' is 'readonly' and cannot be assigned to the mutable type 'number[]'. readonlyTupleAndArrayElaboration.ts(24,9): error TS4104: The type 'readonly number[]' is 'readonly' and cannot be assigned to the mutable type 'number[]'. readonlyTupleAndArrayElaboration.ts(27,7): error TS2322: Type 'readonly [1]' is not assignable to type 'readonly []'. Source has 1 element(s) but target allows only 0. @@ -67,7 +67,7 @@ readonlyTupleAndArrayElaboration.ts(72,7): error TS2322: Type 'number[]' is not !!! error TS4104: The type 'readonly number[]' is 'readonly' and cannot be assigned to the mutable type 'number[]'. arryFn2(b); ~ -!!! error TS4104: The type 'readonly number[]' is 'readonly' and cannot be assigned to the mutable type 'number[]'. +!!! error TS4104: The type 'Readonly' is 'readonly' and cannot be assigned to the mutable type 'number[]'. arryFn2(c); ~ !!! error TS4104: The type 'readonly number[]' is 'readonly' and cannot be assigned to the mutable type 'number[]'. diff --git a/tsc/testdata/baselines/reference/compiler/readonlyTupleAndArrayElaboration.types b/tsc/testdata/baselines/reference/compiler/readonlyTupleAndArrayElaboration.types index b3fa9d5225f96..3f21409adf786 100644 --- a/tsc/testdata/baselines/reference/compiler/readonlyTupleAndArrayElaboration.types +++ b/tsc/testdata/baselines/reference/compiler/readonlyTupleAndArrayElaboration.types @@ -57,7 +57,7 @@ declare const a: readonly number[]; >a : readonly number[] declare const b: Readonly; ->b : readonly number[] +>b : Readonly declare const c: ReadonlyArray; >c : readonly number[] @@ -70,7 +70,7 @@ arryFn2(a); arryFn2(b); >arryFn2(b) : void >arryFn2 : (x: Array) => void ->b : readonly number[] +>b : Readonly arryFn2(c); >arryFn2(c) : void diff --git a/tsc/testdata/baselines/reference/compiler/recursiveConditionalCrash3.types b/tsc/testdata/baselines/reference/compiler/recursiveConditionalCrash3.types index 4158cf1d80c3c..91395d673fd4d 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveConditionalCrash3.types +++ b/tsc/testdata/baselines/reference/compiler/recursiveConditionalCrash3.types @@ -175,10 +175,10 @@ let y2: Expand */ type UseQueryOptions > = Expand ->UseQueryOptions : T extends CanBeExpanded ? T["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_2 ? T_2 extends T["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_2 extends CanBeExpanded ? T_2["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_3 ? T_3 extends T_2["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_3 extends CanBeExpanded ? T_3["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_4 ? T_4 extends T_3["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_4 extends CanBeExpanded ? T_4["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_5 ? T_5 extends T_4["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_5 extends CanBeExpanded ? T_5["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_6 ? T_6 extends T_5["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_6 extends CanBeExpanded ? T_6["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_7 ? T_7 extends T_6["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_7 extends CanBeExpanded ? T_7["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_8 ? T_8 extends T_7["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_8 extends CanBeExpanded ? T_8["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_9 ? T_9 extends T_8["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_9 extends CanBeExpanded ? T_9["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_10 ? T_10 extends T_9["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_10 extends CanBeExpanded ? T_10["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_11 ? T_11 extends T_10["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_11 extends CanBeExpanded ? any : T_11 extends (infer U)[] ? any[] : T_11 extends object ? { [K_1 in keyof T_11]-?: any; } : T_11 : never : never : T_10 extends (infer U)[] ? any[] : T_10 extends object ? { [K_1 in keyof T_10]-?: T_10[K_1] extends infer T_12 ? T_12 extends T_10[K_1] ? T_12 extends CanBeExpanded ? any : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: any; } : T_12 : never : never; } : T_10 : never : never : T_9 extends (infer U)[] ? any[] : T_9 extends object ? { [K_1 in keyof T_9]-?: T_9[K_1] extends infer T_12 ? T_12 extends T_9[K_1] ? T_12 extends CanBeExpanded ? T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? any : T_14 extends (infer U)[] ? any[] : T_14 extends object ? { [K_2 in keyof T_14]-?: any; } : T_14 : never : never : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: T_12[K_2] extends infer T_15 ? T_15 extends T_12[K_2] ? T_15 extends CanBeExpanded ? any : T_15 extends (infer U)[] ? any[] : T_15 extends object ? { [K_3 in keyof T_15]-?: any; } : T_15 : never : never; } : T_12 : never : never; } : T_9 : never : never : T_8 extends (infer U)[] ? any[] : T_8 extends object ? { [K_1 in keyof T_8]-?: T_8[K_1] extends infer T_12 ? T_12 extends T_8[K_1] ? T_12 extends CanBeExpanded ? T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_15 ? T_15 extends T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_15 extends CanBeExpanded ? any : T_15 extends (infer U)[] ? any[] : T_15 extends object ? { [K_2 in keyof T_15]-?: any; } : T_15 : never : never : T_14 extends (infer U)[] ? any[] : T_14 extends object ? { [K_2 in keyof T_14]-?: T_14[K_2] extends infer T_16 ? T_16 extends T_14[K_2] ? T_16 extends CanBeExpanded ? any : T_16 extends (infer U)[] ? any[] : T_16 extends object ? { [K_3 in keyof T_16]-?: any; } : T_16 : never : never; } : T_14 : never : never : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: T_12[K_2] extends infer T_16 ? T_16 extends T_12[K_2] ? T_16 extends CanBeExpanded ? T_16[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_17 ? T_17 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_17 extends SplitAC ? "value" : "default" : never : never] extends infer T_18 ? T_18 extends T_16[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_17 ? T_17 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_17 extends SplitAC ? "value" : "default" : never : never] ? T_18 extends CanBeExpanded ? any : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_3 in keyof T_18]-?: any; } : T_18 : never : never : T_16 extends (infer U)[] ? any[] : T_16 extends object ? { [K_3 in keyof T_16]-?: T_16[K_3] extends infer T_19 ? T_19 extends T_16[K_3] ? T_19 extends CanBeExpanded ? any : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_4 in keyof T_19]-?: T_19[K_4] extends infer T_20 ? T_20 extends T_19[K_4] ? T_20 extends CanBeExpanded ? T_20["default"] : T_20 : never : never; } : T_19 : never : never; } : T_16 : never : never; } : T_12 : never : never; } : T_8 : never : never : T_7 extends (infer U)[] ? any[] : T_7 extends object ? { [K_1 in keyof T_7]-?: T_7[K_1] extends infer T_12 ? T_12 extends T_7[K_1] ? T_12 extends CanBeExpanded ? T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_15 ? T_15 extends T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_15 extends CanBeExpanded ? T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_16 ? T_16 extends T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_16 extends CanBeExpanded ? any : T_16 extends (infer U)[] ? any[] : T_16 extends object ? { [K_2 in keyof T_16]-?: any; } : T_16 : never : never : T_15 extends (infer U)[] ? any[] : T_15 extends object ? { [K_2 in keyof T_15]-?: T_15[K_2] extends infer T_17 ? T_17 extends T_15[K_2] ? T_17 extends CanBeExpanded ? any : T_17 extends (infer U)[] ? any[] : T_17 extends object ? { [K_3 in keyof T_17]-?: any; } : T_17 : never : never; } : T_15 : never : never : T_14 extends (infer U)[] ? any[] : T_14 extends object ? { [K_2 in keyof T_14]-?: T_14[K_2] extends infer T_17 ? T_17 extends T_14[K_2] ? T_17 extends CanBeExpanded ? T_17[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_18 ? T_18 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_18 extends SplitAC ? "value" : "default" : never : never] extends infer T_19 ? T_19 extends T_17[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_18 ? T_18 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_18 extends SplitAC ? "value" : "default" : never : never] ? T_19 extends CanBeExpanded ? any : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_3 in keyof T_19]-?: any; } : T_19 : never : never : T_17 extends (infer U)[] ? any[] : T_17 extends object ? { [K_3 in keyof T_17]-?: T_17[K_3] extends infer T_20 ? T_20 extends T_17[K_3] ? T_20 extends CanBeExpanded ? any : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_4 in keyof T_20]-?: T_20[K_4] extends infer T_21 ? T_21 extends T_20[K_4] ? T_21 extends CanBeExpanded ? T_21["default"] : T_21 : never : never; } : T_20 : never : never; } : T_17 : never : never; } : T_14 : never : never : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: T_12[K_2] extends infer T_17 ? T_17 extends T_12[K_2] ? T_17 extends CanBeExpanded ? T_17[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_18 ? T_18 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_18 extends SplitAC ? "value" : "default" : never : never] extends infer T_19 ? T_19 extends T_17[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_18 ? T_18 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_18 extends SplitAC ? "value" : "default" : never : never] ? T_19 extends CanBeExpanded ? T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_18 ? T_18 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_18 extends SplitAC ? "value" : "default" : never : never] extends infer T_20 ? T_20 extends T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_18 ? T_18 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_18 extends SplitAC ? "value" : "default" : never : never] ? T_20 extends CanBeExpanded ? any : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: any; } : T_20 : never : never : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_3 in keyof T_19]-?: T_19[K_3] extends infer T_21 ? T_21 extends T_19[K_3] ? T_21 extends CanBeExpanded ? any : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_4 in keyof T_21]-?: T_21[K_4] extends infer T_22 ? T_22 extends T_21[K_4] ? T_22 extends CanBeExpanded ? T_22["default"] : T_22 : never : never; } : T_21 : never : never; } : T_19 : never : never : T_17 extends (infer U)[] ? any[] : T_17 extends object ? { [K_3 in keyof T_17]-?: T_17[K_3] extends infer T_21 ? T_21 extends T_17[K_3] ? T_21 extends CanBeExpanded ? T_21[PrefixWith, K_3, "."> extends infer T_22 ? T_22 extends PrefixWith, K_3, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_21[PrefixWith, K_3, "."> extends infer T_22 ? T_22 extends PrefixWith, K_3, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? any : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_4 in keyof T_23]-?: T_23[K_4] extends infer T_24 ? T_24 extends T_23[K_4] ? T_24 extends CanBeExpanded ? T_24["default"] : T_24 : never : never; } : T_23 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_4 in keyof T_21]-?: T_21[K_4] extends infer T_24 ? T_24 extends T_21[K_4] ? T_24 extends CanBeExpanded ? T_24["default"] : T_24 : never : never; } : T_21 : never : never; } : T_17 : never : never; } : T_12 : never : never; } : T_7 : never : never : T_6 extends (infer U)[] ? any[] : T_6 extends object ? { [K_1 in keyof T_6]-?: T_6[K_1] extends infer T_12 ? T_12 extends T_6[K_1] ? T_12 extends CanBeExpanded ? T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_15 ? T_15 extends T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_15 extends CanBeExpanded ? T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_16 ? T_16 extends T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_16 extends CanBeExpanded ? T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_17 ? T_17 extends T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_17 extends CanBeExpanded ? any : T_17 extends (infer U)[] ? any[] : T_17 extends object ? { [K_2 in keyof T_17]-?: any; } : T_17 : never : never : T_16 extends (infer U)[] ? any[] : T_16 extends object ? { [K_2 in keyof T_16]-?: T_16[K_2] extends infer T_18 ? T_18 extends T_16[K_2] ? T_18 extends CanBeExpanded ? any : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_3 in keyof T_18]-?: any; } : T_18 : never : never; } : T_16 : never : never : T_15 extends (infer U)[] ? any[] : T_15 extends object ? { [K_2 in keyof T_15]-?: T_15[K_2] extends infer T_18 ? T_18 extends T_15[K_2] ? T_18 extends CanBeExpanded ? T_18[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] extends infer T_20 ? T_20 extends T_18[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] ? T_20 extends CanBeExpanded ? any : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: any; } : T_20 : never : never : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_3 in keyof T_18]-?: T_18[K_3] extends infer T_21 ? T_21 extends T_18[K_3] ? T_21 extends CanBeExpanded ? any : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_4 in keyof T_21]-?: T_21[K_4] extends infer T_22 ? T_22 extends T_21[K_4] ? T_22 extends CanBeExpanded ? T_22["default"] : T_22 : never : never; } : T_21 : never : never; } : T_18 : never : never; } : T_15 : never : never : T_14 extends (infer U)[] ? any[] : T_14 extends object ? { [K_2 in keyof T_14]-?: T_14[K_2] extends infer T_18 ? T_18 extends T_14[K_2] ? T_18 extends CanBeExpanded ? T_18[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] extends infer T_20 ? T_20 extends T_18[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] ? T_20 extends CanBeExpanded ? T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] extends infer T_21 ? T_21 extends T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] ? T_21 extends CanBeExpanded ? any : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: any; } : T_21 : never : never : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: T_20[K_3] extends infer T_22 ? T_22 extends T_20[K_3] ? T_22 extends CanBeExpanded ? any : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_4 in keyof T_22]-?: T_22[K_4] extends infer T_23 ? T_23 extends T_22[K_4] ? T_23 extends CanBeExpanded ? T_23["default"] : T_23 : never : never; } : T_22 : never : never; } : T_20 : never : never : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_3 in keyof T_18]-?: T_18[K_3] extends infer T_22 ? T_22 extends T_18[K_3] ? T_22 extends CanBeExpanded ? T_22[PrefixWith, K_3, "."> extends infer T_23 ? T_23 extends PrefixWith, K_3, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_22[PrefixWith, K_3, "."> extends infer T_23 ? T_23 extends PrefixWith, K_3, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? any : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_4 in keyof T_24]-?: T_24[K_4] extends infer T_25 ? T_25 extends T_24[K_4] ? T_25 extends CanBeExpanded ? T_25["default"] : T_25 : never : never; } : T_24 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_4 in keyof T_22]-?: T_22[K_4] extends infer T_25 ? T_25 extends T_22[K_4] ? T_25 extends CanBeExpanded ? T_25["default"] : T_25 : never : never; } : T_22 : never : never; } : T_18 : never : never; } : T_14 : never : never : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: T_12[K_2] extends infer T_18 ? T_18 extends T_12[K_2] ? T_18 extends CanBeExpanded ? T_18[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] extends infer T_20 ? T_20 extends T_18[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] ? T_20 extends CanBeExpanded ? T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] extends infer T_21 ? T_21 extends T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? any : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: any; } : T_22 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_23 ? T_23 extends T_21[K_3] ? T_23 extends CanBeExpanded ? any : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_4 in keyof T_23]-?: T_23[K_4] extends infer T_24 ? T_24 extends T_23[K_4] ? T_24 extends CanBeExpanded ? T_24["default"] : T_24 : never : never; } : T_23 : never : never; } : T_21 : never : never : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: T_20[K_3] extends infer T_23 ? T_23 extends T_20[K_3] ? T_23 extends CanBeExpanded ? T_23[PrefixWith, K_3, "."> extends infer T_24 ? T_24 extends PrefixWith, K_3, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith, K_3, "."> extends infer T_24 ? T_24 extends PrefixWith, K_3, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_26 ? T_26 extends T_25[K_4] ? T_26 extends CanBeExpanded ? T_26["default"] : T_26 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_4 in keyof T_23]-?: T_23[K_4] extends infer T_26 ? T_26 extends T_23[K_4] ? T_26 extends CanBeExpanded ? T_26["default"] : T_26 : never : never; } : T_23 : never : never; } : T_20 : never : never : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_3 in keyof T_18]-?: T_18[K_3] extends infer T_23 ? T_23 extends T_18[K_3] ? T_23 extends CanBeExpanded ? T_23[PrefixWith, K_3, "."> extends infer T_24 ? T_24 extends PrefixWith, K_3, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith, K_3, "."> extends infer T_24 ? T_24 extends PrefixWith, K_3, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith, K_3, "."> extends infer T_24 ? T_24 extends PrefixWith, K_3, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith, K_3, "."> extends infer T_24 ? T_24 extends PrefixWith, K_3, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_27 ? T_27 extends T_26[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_27 ? T_27 extends T_25[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_4 in keyof T_23]-?: T_23[K_4] extends infer T_27 ? T_27 extends T_23[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_23 : never : never; } : T_18 : never : never; } : T_12 : never : never; } : T_6 : never : never : T_5 extends (infer U)[] ? any[] : T_5 extends object ? { [K_1 in keyof T_5]-?: T_5[K_1] extends infer T_12 ? T_12 extends T_5[K_1] ? T_12 extends CanBeExpanded ? T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_15 ? T_15 extends T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_15 extends CanBeExpanded ? T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_16 ? T_16 extends T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_16 extends CanBeExpanded ? T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_17 ? T_17 extends T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_17 extends CanBeExpanded ? T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_18 ? T_18 extends T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_18 extends CanBeExpanded ? any : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_2 in keyof T_18]-?: any; } : T_18 : never : never : T_17 extends (infer U)[] ? any[] : T_17 extends object ? { [K_2 in keyof T_17]-?: T_17[K_2] extends infer T_19 ? T_19 extends T_17[K_2] ? T_19 extends CanBeExpanded ? any : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_3 in keyof T_19]-?: any; } : T_19 : never : never; } : T_17 : never : never : T_16 extends (infer U)[] ? any[] : T_16 extends object ? { [K_2 in keyof T_16]-?: T_16[K_2] extends infer T_19 ? T_19 extends T_16[K_2] ? T_19 extends CanBeExpanded ? T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_21 ? T_21 extends T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_21 extends CanBeExpanded ? any : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: any; } : T_21 : never : never : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_3 in keyof T_19]-?: T_19[K_3] extends infer T_22 ? T_22 extends T_19[K_3] ? T_22 extends CanBeExpanded ? any : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_4 in keyof T_22]-?: T_22[K_4] extends infer T_23 ? T_23 extends T_22[K_4] ? T_23 extends CanBeExpanded ? T_23["default"] : T_23 : never : never; } : T_22 : never : never; } : T_19 : never : never; } : T_16 : never : never : T_15 extends (infer U)[] ? any[] : T_15 extends object ? { [K_2 in keyof T_15]-?: T_15[K_2] extends infer T_19 ? T_19 extends T_15[K_2] ? T_19 extends CanBeExpanded ? T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_21 ? T_21 extends T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? any : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: any; } : T_22 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_23 ? T_23 extends T_21[K_3] ? T_23 extends CanBeExpanded ? any : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_4 in keyof T_23]-?: T_23[K_4] extends infer T_24 ? T_24 extends T_23[K_4] ? T_24 extends CanBeExpanded ? T_24["default"] : T_24 : never : never; } : T_23 : never : never; } : T_21 : never : never : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_3 in keyof T_19]-?: T_19[K_3] extends infer T_23 ? T_23 extends T_19[K_3] ? T_23 extends CanBeExpanded ? T_23[PrefixWith, K_3, "."> extends infer T_24 ? T_24 extends PrefixWith, K_3, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith, K_3, "."> extends infer T_24 ? T_24 extends PrefixWith, K_3, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_26 ? T_26 extends T_25[K_4] ? T_26 extends CanBeExpanded ? T_26["default"] : T_26 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_4 in keyof T_23]-?: T_23[K_4] extends infer T_26 ? T_26 extends T_23[K_4] ? T_26 extends CanBeExpanded ? T_26["default"] : T_26 : never : never; } : T_23 : never : never; } : T_19 : never : never; } : T_15 : never : never : T_14 extends (infer U)[] ? any[] : T_14 extends object ? { [K_2 in keyof T_14]-?: T_14[K_2] extends infer T_19 ? T_19 extends T_14[K_2] ? T_19 extends CanBeExpanded ? T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_21 ? T_21 extends T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? any : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: any; } : T_23 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_24 ? T_24 extends T_22[K_3] ? T_24 extends CanBeExpanded ? any : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_4 in keyof T_24]-?: T_24[K_4] extends infer T_25 ? T_25 extends T_24[K_4] ? T_25 extends CanBeExpanded ? T_25["default"] : T_25 : never : never; } : T_24 : never : never; } : T_22 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_24 ? T_24 extends T_21[K_3] ? T_24 extends CanBeExpanded ? T_24[PrefixWith, K_3, "."> extends infer T_25 ? T_25 extends PrefixWith, K_3, "."> ? T_25 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_24[PrefixWith, K_3, "."> extends infer T_25 ? T_25 extends PrefixWith, K_3, "."> ? T_25 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_27 ? T_27 extends T_26[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_26 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_4 in keyof T_24]-?: T_24[K_4] extends infer T_27 ? T_27 extends T_24[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_24 : never : never; } : T_21 : never : never : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_3 in keyof T_19]-?: T_19[K_3] extends infer T_24 ? T_24 extends T_19[K_3] ? T_24 extends CanBeExpanded ? T_24[PrefixWith, K_3, "."> extends infer T_25 ? T_25 extends PrefixWith, K_3, "."> ? T_25 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_24[PrefixWith, K_3, "."> extends infer T_25 ? T_25 extends PrefixWith, K_3, "."> ? T_25 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith, K_3, "."> extends infer T_25 ? T_25 extends PrefixWith, K_3, "."> ? T_25 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith, K_3, "."> extends infer T_25 ? T_25 extends PrefixWith, K_3, "."> ? T_25 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_28 ? T_28 extends T_27[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_28 ? T_28 extends T_26[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_26 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_4 in keyof T_24]-?: T_24[K_4] extends infer T_28 ? T_28 extends T_24[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_24 : never : never; } : T_19 : never : never; } : T_14 : never : never : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: T_12[K_2] extends infer T_19 ? T_19 extends T_12[K_2] ? T_19 extends CanBeExpanded ? T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_21 ? T_21 extends T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? any : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: any; } : T_24 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_25 ? T_25 extends T_23[K_3] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_26 ? T_26 extends T_25[K_4] ? T_26 extends CanBeExpanded ? T_26["default"] : T_26 : never : never; } : T_25 : never : never; } : T_23 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_25 ? T_25 extends T_22[K_3] ? T_25 extends CanBeExpanded ? T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_28 ? T_28 extends T_27[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_27 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_28 ? T_28 extends T_25[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_25 : never : never; } : T_22 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_25 ? T_25 extends T_21[K_3] ? T_25 extends CanBeExpanded ? T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_29 ? T_29 extends T_28[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_29 ? T_29 extends T_27[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_27 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_29 ? T_29 extends T_25[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_25 : never : never; } : T_21 : never : never : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_3 in keyof T_19]-?: T_19[K_3] extends infer T_25 ? T_25 extends T_19[K_3] ? T_25 extends CanBeExpanded ? T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_30 ? T_30 extends T_28[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_30 ? T_30 extends T_27[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_27 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_30 ? T_30 extends T_25[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_25 : never : never; } : T_19 : never : never; } : T_12 : never : never; } : T_5 : never : never : T_4 extends (infer U)[] ? any[] : T_4 extends object ? { [K_1 in keyof T_4]-?: T_4[K_1] extends infer T_12 ? T_12 extends T_4[K_1] ? T_12 extends CanBeExpanded ? T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_15 ? T_15 extends T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_15 extends CanBeExpanded ? T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_16 ? T_16 extends T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_16 extends CanBeExpanded ? T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_17 ? T_17 extends T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_17 extends CanBeExpanded ? T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_18 ? T_18 extends T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_18 extends CanBeExpanded ? T_18[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_19 ? T_19 extends T_18[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_19 extends CanBeExpanded ? any : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_2 in keyof T_19]-?: any; } : T_19 : never : never : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_2 in keyof T_18]-?: T_18[K_2] extends infer T_20 ? T_20 extends T_18[K_2] ? T_20 extends CanBeExpanded ? any : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: any; } : T_20 : never : never; } : T_18 : never : never : T_17 extends (infer U)[] ? any[] : T_17 extends object ? { [K_2 in keyof T_17]-?: T_17[K_2] extends infer T_20 ? T_20 extends T_17[K_2] ? T_20 extends CanBeExpanded ? T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? any : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: any; } : T_22 : never : never : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: T_20[K_3] extends infer T_23 ? T_23 extends T_20[K_3] ? T_23 extends CanBeExpanded ? any : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_4 in keyof T_23]-?: T_23[K_4] extends infer T_24 ? T_24 extends T_23[K_4] ? T_24 extends CanBeExpanded ? T_24["default"] : T_24 : never : never; } : T_23 : never : never; } : T_20 : never : never; } : T_17 : never : never : T_16 extends (infer U)[] ? any[] : T_16 extends object ? { [K_2 in keyof T_16]-?: T_16[K_2] extends infer T_20 ? T_20 extends T_16[K_2] ? T_20 extends CanBeExpanded ? T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? any : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: any; } : T_23 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_24 ? T_24 extends T_22[K_3] ? T_24 extends CanBeExpanded ? any : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_4 in keyof T_24]-?: T_24[K_4] extends infer T_25 ? T_25 extends T_24[K_4] ? T_25 extends CanBeExpanded ? T_25["default"] : T_25 : never : never; } : T_24 : never : never; } : T_22 : never : never : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: T_20[K_3] extends infer T_24 ? T_24 extends T_20[K_3] ? T_24 extends CanBeExpanded ? T_24[PrefixWith, K_3, "."> extends infer T_25 ? T_25 extends PrefixWith, K_3, "."> ? T_25 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_24[PrefixWith, K_3, "."> extends infer T_25 ? T_25 extends PrefixWith, K_3, "."> ? T_25 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_27 ? T_27 extends T_26[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_26 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_4 in keyof T_24]-?: T_24[K_4] extends infer T_27 ? T_27 extends T_24[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_24 : never : never; } : T_20 : never : never; } : T_16 : never : never : T_15 extends (infer U)[] ? any[] : T_15 extends object ? { [K_2 in keyof T_15]-?: T_15[K_2] extends infer T_20 ? T_20 extends T_15[K_2] ? T_20 extends CanBeExpanded ? T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? any : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: any; } : T_24 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_25 ? T_25 extends T_23[K_3] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_26 ? T_26 extends T_25[K_4] ? T_26 extends CanBeExpanded ? T_26["default"] : T_26 : never : never; } : T_25 : never : never; } : T_23 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_25 ? T_25 extends T_22[K_3] ? T_25 extends CanBeExpanded ? T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_28 ? T_28 extends T_27[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_27 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_28 ? T_28 extends T_25[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_25 : never : never; } : T_22 : never : never : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: T_20[K_3] extends infer T_25 ? T_25 extends T_20[K_3] ? T_25 extends CanBeExpanded ? T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_29 ? T_29 extends T_28[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_29 ? T_29 extends T_27[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_27 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_29 ? T_29 extends T_25[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_25 : never : never; } : T_20 : never : never; } : T_15 : never : never : T_14 extends (infer U)[] ? any[] : T_14 extends object ? { [K_2 in keyof T_14]-?: T_14[K_2] extends infer T_20 ? T_20 extends T_14[K_2] ? T_20 extends CanBeExpanded ? T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: any; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_26 ? T_26 extends T_24[K_3] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_27 ? T_27 extends T_26[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_26 : never : never; } : T_24 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_26 ? T_26 extends T_23[K_3] ? T_26 extends CanBeExpanded ? T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_29 ? T_29 extends T_28[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_28 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_29 ? T_29 extends T_26[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_26 : never : never; } : T_23 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_26 ? T_26 extends T_22[K_3] ? T_26 extends CanBeExpanded ? T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_30 ? T_30 extends T_28[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_28 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_30 ? T_30 extends T_26[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_26 : never : never; } : T_22 : never : never : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: T_20[K_3] extends infer T_26 ? T_26 extends T_20[K_3] ? T_26 extends CanBeExpanded ? T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_31 ? T_31 extends T_30[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_31 ? T_31 extends T_29[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_31 ? T_31 extends T_28[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_28 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_31 ? T_31 extends T_26[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_26 : never : never; } : T_20 : never : never; } : T_14 : never : never : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: T_12[K_2] extends infer T_20 ? T_20 extends T_12[K_2] ? T_20 extends CanBeExpanded ? T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: any; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_27 ? T_27 extends T_25[K_3] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_28 ? T_28 extends T_27[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_27 : never : never; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_27 ? T_27 extends T_24[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_30 ? T_30 extends T_27[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_27 : never : never; } : T_24 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_27 ? T_27 extends T_23[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_31 ? T_31 extends T_30[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_31 ? T_31 extends T_29[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_31 ? T_31 extends T_27[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_27 : never : never; } : T_23 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_27 ? T_27 extends T_22[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_32 ? T_32 extends T_30[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_32 ? T_32 extends T_29[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_32 ? T_32 extends T_27[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_27 : never : never; } : T_22 : never : never : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: T_20[K_3] extends infer T_27 ? T_27 extends T_20[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_33 ? T_33 extends T_32[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_33 ? T_33 extends T_31[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_33 ? T_33 extends T_30[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_33 ? T_33 extends T_29[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_33 ? T_33 extends T_27[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_27 : never : never; } : T_20 : never : never; } : T_12 : never : never; } : T_4 : never : never : T_3 extends (infer U)[] ? any[] : T_3 extends object ? { [K_1 in keyof T_3]-?: T_3[K_1] extends infer T_12 ? T_12 extends T_3[K_1] ? T_12 extends CanBeExpanded ? T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_15 ? T_15 extends T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_15 extends CanBeExpanded ? T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_16 ? T_16 extends T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_16 extends CanBeExpanded ? T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_17 ? T_17 extends T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_17 extends CanBeExpanded ? T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_18 ? T_18 extends T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_18 extends CanBeExpanded ? T_18[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_19 ? T_19 extends T_18[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_19 extends CanBeExpanded ? T_19[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_20 ? T_20 extends T_19[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_20 extends CanBeExpanded ? any : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_2 in keyof T_20]-?: any; } : T_20 : never : never : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_2 in keyof T_19]-?: T_19[K_2] extends infer T_21 ? T_21 extends T_19[K_2] ? T_21 extends CanBeExpanded ? any : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: any; } : T_21 : never : never; } : T_19 : never : never : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_2 in keyof T_18]-?: T_18[K_2] extends infer T_21 ? T_21 extends T_18[K_2] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? any : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: any; } : T_23 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_24 ? T_24 extends T_21[K_3] ? T_24 extends CanBeExpanded ? any : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_4 in keyof T_24]-?: T_24[K_4] extends infer T_25 ? T_25 extends T_24[K_4] ? T_25 extends CanBeExpanded ? T_25["default"] : T_25 : never : never; } : T_24 : never : never; } : T_21 : never : never; } : T_18 : never : never : T_17 extends (infer U)[] ? any[] : T_17 extends object ? { [K_2 in keyof T_17]-?: T_17[K_2] extends infer T_21 ? T_21 extends T_17[K_2] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? any : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: any; } : T_24 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_25 ? T_25 extends T_23[K_3] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_26 ? T_26 extends T_25[K_4] ? T_26 extends CanBeExpanded ? T_26["default"] : T_26 : never : never; } : T_25 : never : never; } : T_23 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_25 ? T_25 extends T_21[K_3] ? T_25 extends CanBeExpanded ? T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_28 ? T_28 extends T_27[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_27 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_28 ? T_28 extends T_25[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_25 : never : never; } : T_21 : never : never; } : T_17 : never : never : T_16 extends (infer U)[] ? any[] : T_16 extends object ? { [K_2 in keyof T_16]-?: T_16[K_2] extends infer T_21 ? T_21 extends T_16[K_2] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: any; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_26 ? T_26 extends T_24[K_3] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_27 ? T_27 extends T_26[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_26 : never : never; } : T_24 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_26 ? T_26 extends T_23[K_3] ? T_26 extends CanBeExpanded ? T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_29 ? T_29 extends T_28[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_28 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_29 ? T_29 extends T_26[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_26 : never : never; } : T_23 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_26 ? T_26 extends T_21[K_3] ? T_26 extends CanBeExpanded ? T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_30 ? T_30 extends T_28[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_28 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_30 ? T_30 extends T_26[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_26 : never : never; } : T_21 : never : never; } : T_16 : never : never : T_15 extends (infer U)[] ? any[] : T_15 extends object ? { [K_2 in keyof T_15]-?: T_15[K_2] extends infer T_21 ? T_21 extends T_15[K_2] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: any; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_27 ? T_27 extends T_25[K_3] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_28 ? T_28 extends T_27[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_27 : never : never; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_27 ? T_27 extends T_24[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_30 ? T_30 extends T_27[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_27 : never : never; } : T_24 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_27 ? T_27 extends T_23[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_31 ? T_31 extends T_30[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_31 ? T_31 extends T_29[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_31 ? T_31 extends T_27[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_27 : never : never; } : T_23 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_27 ? T_27 extends T_21[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_32 ? T_32 extends T_30[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_32 ? T_32 extends T_29[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_32 ? T_32 extends T_27[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_27 : never : never; } : T_21 : never : never; } : T_15 : never : never : T_14 extends (infer U)[] ? any[] : T_14 extends object ? { [K_2 in keyof T_14]-?: T_14[K_2] extends infer T_21 ? T_21 extends T_14[K_2] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: any; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_28 ? T_28 extends T_26[K_3] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_29 ? T_29 extends T_28[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_28 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_28 ? T_28 extends T_25[K_3] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_31 ? T_31 extends T_30[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_30 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_31 ? T_31 extends T_28[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_28 : never : never; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_28 ? T_28 extends T_24[K_3] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_32 ? T_32 extends T_30[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_30 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_32 ? T_32 extends T_28[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_28 : never : never; } : T_24 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_28 ? T_28 extends T_23[K_3] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_33 ? T_33 extends T_32[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_33 ? T_33 extends T_31[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_33 ? T_33 extends T_30[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_30 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_33 ? T_33 extends T_28[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_28 : never : never; } : T_23 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_28 ? T_28 extends T_21[K_3] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? any : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_34 ? T_34 extends T_33[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_34 ? T_34 extends T_32[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_34 ? T_34 extends T_31[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_34 ? T_34 extends T_30[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_30 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_34 ? T_34 extends T_28[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_28 : never : never; } : T_21 : never : never; } : T_14 : never : never : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: T_12[K_2] extends infer T_21 ? T_21 extends T_12[K_2] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_3 in keyof T_28]-?: any; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: T_27[K_3] extends infer T_29 ? T_29 extends T_27[K_3] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_29 ? T_29 extends T_26[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_32 ? T_32 extends T_29[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_29 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_29 ? T_29 extends T_25[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_33 ? T_33 extends T_32[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_33 ? T_33 extends T_31[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_33 ? T_33 extends T_29[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_29 : never : never; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_29 ? T_29 extends T_24[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? any : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_34 ? T_34 extends T_33[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_34 ? T_34 extends T_32[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_34 ? T_34 extends T_31[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_34 ? T_34 extends T_29[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_29 : never : never; } : T_24 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_29 ? T_29 extends T_23[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? any : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_35 ? T_35 extends T_34[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_35 ? T_35 extends T_33[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_35 ? T_35 extends T_32[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_35 ? T_35 extends T_31[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_35 ? T_35 extends T_29[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_29 : never : never; } : T_23 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_29 ? T_29 extends T_21[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? any : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_36 ? T_36 extends T_35[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_36 ? T_36 extends T_34[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_36 ? T_36 extends T_33[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_36 ? T_36 extends T_32[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_36 ? T_36 extends T_31[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_36 ? T_36 extends T_29[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_29 : never : never; } : T_21 : never : never; } : T_12 : never : never; } : T_3 : never : never : T_2 extends (infer U)[] ? any[] : T_2 extends object ? { [K_1 in keyof T_2]-?: T_2[K_1] extends infer T_12 ? T_12 extends T_2[K_1] ? T_12 extends CanBeExpanded ? T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_15 ? T_15 extends T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_15 extends CanBeExpanded ? T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_16 ? T_16 extends T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_16 extends CanBeExpanded ? T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_17 ? T_17 extends T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_17 extends CanBeExpanded ? T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_18 ? T_18 extends T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_18 extends CanBeExpanded ? T_18[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_19 ? T_19 extends T_18[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_19 extends CanBeExpanded ? T_19[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_20 ? T_20 extends T_19[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_20 extends CanBeExpanded ? T_20[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_21 ? T_21 extends T_20[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_21 extends CanBeExpanded ? any : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_2 in keyof T_21]-?: any; } : T_21 : never : never : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_2 in keyof T_20]-?: T_20[K_2] extends infer T_22 ? T_22 extends T_20[K_2] ? T_22 extends CanBeExpanded ? any : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: any; } : T_22 : never : never; } : T_20 : never : never : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_2 in keyof T_19]-?: T_19[K_2] extends infer T_22 ? T_22 extends T_19[K_2] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? any : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: any; } : T_24 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_25 ? T_25 extends T_22[K_3] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_26 ? T_26 extends T_25[K_4] ? T_26 extends CanBeExpanded ? T_26["default"] : T_26 : never : never; } : T_25 : never : never; } : T_22 : never : never; } : T_19 : never : never : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_2 in keyof T_18]-?: T_18[K_2] extends infer T_22 ? T_22 extends T_18[K_2] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: any; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_26 ? T_26 extends T_24[K_3] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_27 ? T_27 extends T_26[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_26 : never : never; } : T_24 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_26 ? T_26 extends T_22[K_3] ? T_26 extends CanBeExpanded ? T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_29 ? T_29 extends T_28[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_28 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_29 ? T_29 extends T_26[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_26 : never : never; } : T_22 : never : never; } : T_18 : never : never : T_17 extends (infer U)[] ? any[] : T_17 extends object ? { [K_2 in keyof T_17]-?: T_17[K_2] extends infer T_22 ? T_22 extends T_17[K_2] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: any; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_27 ? T_27 extends T_25[K_3] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_28 ? T_28 extends T_27[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_27 : never : never; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_27 ? T_27 extends T_24[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_30 ? T_30 extends T_27[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_27 : never : never; } : T_24 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_27 ? T_27 extends T_22[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_31 ? T_31 extends T_30[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_31 ? T_31 extends T_29[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_31 ? T_31 extends T_27[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_27 : never : never; } : T_22 : never : never; } : T_17 : never : never : T_16 extends (infer U)[] ? any[] : T_16 extends object ? { [K_2 in keyof T_16]-?: T_16[K_2] extends infer T_22 ? T_22 extends T_16[K_2] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: any; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_28 ? T_28 extends T_26[K_3] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_29 ? T_29 extends T_28[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_28 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_28 ? T_28 extends T_25[K_3] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_31 ? T_31 extends T_30[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_30 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_31 ? T_31 extends T_28[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_28 : never : never; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_28 ? T_28 extends T_24[K_3] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_32 ? T_32 extends T_30[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_30 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_32 ? T_32 extends T_28[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_28 : never : never; } : T_24 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_28 ? T_28 extends T_22[K_3] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_33 ? T_33 extends T_32[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_33 ? T_33 extends T_31[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_33 ? T_33 extends T_30[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_30 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_33 ? T_33 extends T_28[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_28 : never : never; } : T_22 : never : never; } : T_16 : never : never : T_15 extends (infer U)[] ? any[] : T_15 extends object ? { [K_2 in keyof T_15]-?: T_15[K_2] extends infer T_22 ? T_22 extends T_15[K_2] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_3 in keyof T_28]-?: any; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: T_27[K_3] extends infer T_29 ? T_29 extends T_27[K_3] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_29 ? T_29 extends T_26[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_32 ? T_32 extends T_29[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_29 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_29 ? T_29 extends T_25[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_33 ? T_33 extends T_32[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_33 ? T_33 extends T_31[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_33 ? T_33 extends T_29[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_29 : never : never; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_29 ? T_29 extends T_24[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? any : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_34 ? T_34 extends T_33[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_34 ? T_34 extends T_32[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_34 ? T_34 extends T_31[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_34 ? T_34 extends T_29[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_29 : never : never; } : T_24 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_29 ? T_29 extends T_22[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? any : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_35 ? T_35 extends T_34[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_35 ? T_35 extends T_33[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_35 ? T_35 extends T_32[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_35 ? T_35 extends T_31[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_35 ? T_35 extends T_29[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_29 : never : never; } : T_22 : never : never; } : T_15 : never : never : T_14 extends (infer U)[] ? any[] : T_14 extends object ? { [K_2 in keyof T_14]-?: T_14[K_2] extends infer T_22 ? T_22 extends T_14[K_2] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_3 in keyof T_29]-?: any; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_3 in keyof T_28]-?: T_28[K_3] extends infer T_30 ? T_30 extends T_28[K_3] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_31 ? T_31 extends T_30[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_30 : never : never; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: T_27[K_3] extends infer T_30 ? T_30 extends T_27[K_3] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_33 ? T_33 extends T_32[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_32 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_33 ? T_33 extends T_30[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_30 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_30 ? T_30 extends T_26[K_3] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? any : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_34 ? T_34 extends T_33[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_34 ? T_34 extends T_32[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_32 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_34 ? T_34 extends T_30[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_30 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_30 ? T_30 extends T_25[K_3] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? any : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_35 ? T_35 extends T_34[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_35 ? T_35 extends T_33[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_35 ? T_35 extends T_32[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_32 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_35 ? T_35 extends T_30[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_30 : never : never; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_30 ? T_30 extends T_24[K_3] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? any : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_36 ? T_36 extends T_35[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_36 ? T_36 extends T_34[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_36 ? T_36 extends T_33[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_36 ? T_36 extends T_32[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_32 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_36 ? T_36 extends T_30[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_30 : never : never; } : T_24 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_30 ? T_30 extends T_22[K_3] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? any : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_37 ? T_37 extends T_36[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_37 ? T_37 extends T_35[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_37 ? T_37 extends T_34[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_37 ? T_37 extends T_33[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_37 ? T_37 extends T_32[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_32 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_37 ? T_37 extends T_30[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_30 : never : never; } : T_22 : never : never; } : T_14 : never : never : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: T_12[K_2] extends infer T_22 ? T_22 extends T_12[K_2] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_3 in keyof T_30]-?: any; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_3 in keyof T_29]-?: T_29[K_3] extends infer T_31 ? T_31 extends T_29[K_3] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_3 in keyof T_28]-?: T_28[K_3] extends infer T_31 ? T_31 extends T_28[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? any : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_34 ? T_34 extends T_33[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_34 ? T_34 extends T_31[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_31 : never : never; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: T_27[K_3] extends infer T_31 ? T_31 extends T_27[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? any : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_35 ? T_35 extends T_34[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_35 ? T_35 extends T_33[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_35 ? T_35 extends T_31[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_31 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_31 ? T_31 extends T_26[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? any : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_36 ? T_36 extends T_35[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_36 ? T_36 extends T_34[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_36 ? T_36 extends T_33[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_36 ? T_36 extends T_31[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_31 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_31 ? T_31 extends T_25[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? any : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_37 ? T_37 extends T_36[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_37 ? T_37 extends T_35[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_37 ? T_37 extends T_34[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_37 ? T_37 extends T_33[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_37 ? T_37 extends T_31[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_31 : never : never; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_31 ? T_31 extends T_24[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? any : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_38 ? T_38 extends T_37[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_38 ? T_38 extends T_36[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_38 ? T_38 extends T_35[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_38 ? T_38 extends T_34[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_38 ? T_38 extends T_33[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_38 ? T_38 extends T_31[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_31 : never : never; } : T_24 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_31 ? T_31 extends T_22[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? T_37[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_38 ? T_38 extends T_37[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_38 extends CanBeExpanded ? any : T_38 extends (infer U)[] ? any[] : T_38 extends object ? { [K_4 in keyof T_38]-?: T_38[K_4] extends infer T_39 ? T_39 extends T_38[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_38 : never : never : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_39 ? T_39 extends T_37[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_39 ? T_39 extends T_36[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_39 ? T_39 extends T_35[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_39 ? T_39 extends T_34[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_39 ? T_39 extends T_33[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_39 ? T_39 extends T_31[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_31 : never : never; } : T_22 : never : never; } : T_12 : never : never; } : T_2 : never : never : T extends (infer U)[] ? any[] : T extends object ? { [K_1 in keyof T]-?: T[K_1] extends infer T_12 ? T_12 extends T[K_1] ? T_12 extends CanBeExpanded ? T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_15 ? T_15 extends T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_15 extends CanBeExpanded ? T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_16 ? T_16 extends T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_16 extends CanBeExpanded ? T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_17 ? T_17 extends T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_17 extends CanBeExpanded ? T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_18 ? T_18 extends T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_18 extends CanBeExpanded ? T_18[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_19 ? T_19 extends T_18[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_19 extends CanBeExpanded ? T_19[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_20 ? T_20 extends T_19[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_20 extends CanBeExpanded ? T_20[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_21 ? T_21 extends T_20[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_21 extends CanBeExpanded ? T_21[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_21[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? any : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_2 in keyof T_22]-?: any; } : T_22 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_2 in keyof T_21]-?: T_21[K_2] extends infer T_23 ? T_23 extends T_21[K_2] ? T_23 extends CanBeExpanded ? any : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: any; } : T_23 : never : never; } : T_21 : never : never : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_2 in keyof T_20]-?: T_20[K_2] extends infer T_23 ? T_23 extends T_20[K_2] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: any; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_26 ? T_26 extends T_23[K_3] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_27 ? T_27 extends T_26[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_26 : never : never; } : T_23 : never : never; } : T_20 : never : never : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_2 in keyof T_19]-?: T_19[K_2] extends infer T_23 ? T_23 extends T_19[K_2] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: any; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_27 ? T_27 extends T_25[K_3] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_28 ? T_28 extends T_27[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_27 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_27 ? T_27 extends T_23[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_30 ? T_30 extends T_27[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_27 : never : never; } : T_23 : never : never; } : T_19 : never : never : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_2 in keyof T_18]-?: T_18[K_2] extends infer T_23 ? T_23 extends T_18[K_2] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: any; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_28 ? T_28 extends T_26[K_3] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_29 ? T_29 extends T_28[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_28 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_28 ? T_28 extends T_25[K_3] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_31 ? T_31 extends T_30[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_30 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_31 ? T_31 extends T_28[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_28 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_28 ? T_28 extends T_23[K_3] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_32 ? T_32 extends T_30[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_30 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_32 ? T_32 extends T_28[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_28 : never : never; } : T_23 : never : never; } : T_18 : never : never : T_17 extends (infer U)[] ? any[] : T_17 extends object ? { [K_2 in keyof T_17]-?: T_17[K_2] extends infer T_23 ? T_23 extends T_17[K_2] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_3 in keyof T_28]-?: any; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: T_27[K_3] extends infer T_29 ? T_29 extends T_27[K_3] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_29 ? T_29 extends T_26[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_32 ? T_32 extends T_29[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_29 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_29 ? T_29 extends T_25[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_33 ? T_33 extends T_32[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_33 ? T_33 extends T_31[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_33 ? T_33 extends T_29[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_29 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_29 ? T_29 extends T_23[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? any : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_34 ? T_34 extends T_33[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_34 ? T_34 extends T_32[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_34 ? T_34 extends T_31[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_34 ? T_34 extends T_29[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_29 : never : never; } : T_23 : never : never; } : T_17 : never : never : T_16 extends (infer U)[] ? any[] : T_16 extends object ? { [K_2 in keyof T_16]-?: T_16[K_2] extends infer T_23 ? T_23 extends T_16[K_2] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_3 in keyof T_29]-?: any; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_3 in keyof T_28]-?: T_28[K_3] extends infer T_30 ? T_30 extends T_28[K_3] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_31 ? T_31 extends T_30[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_30 : never : never; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: T_27[K_3] extends infer T_30 ? T_30 extends T_27[K_3] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_33 ? T_33 extends T_32[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_32 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_33 ? T_33 extends T_30[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_30 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_30 ? T_30 extends T_26[K_3] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? any : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_34 ? T_34 extends T_33[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_34 ? T_34 extends T_32[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_32 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_34 ? T_34 extends T_30[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_30 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_30 ? T_30 extends T_25[K_3] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? any : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_35 ? T_35 extends T_34[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_35 ? T_35 extends T_33[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_35 ? T_35 extends T_32[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_32 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_35 ? T_35 extends T_30[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_30 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_30 ? T_30 extends T_23[K_3] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? any : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_36 ? T_36 extends T_35[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_36 ? T_36 extends T_34[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_36 ? T_36 extends T_33[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_36 ? T_36 extends T_32[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_32 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_36 ? T_36 extends T_30[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_30 : never : never; } : T_23 : never : never; } : T_16 : never : never : T_15 extends (infer U)[] ? any[] : T_15 extends object ? { [K_2 in keyof T_15]-?: T_15[K_2] extends infer T_23 ? T_23 extends T_15[K_2] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_3 in keyof T_30]-?: any; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_3 in keyof T_29]-?: T_29[K_3] extends infer T_31 ? T_31 extends T_29[K_3] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_3 in keyof T_28]-?: T_28[K_3] extends infer T_31 ? T_31 extends T_28[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? any : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_34 ? T_34 extends T_33[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_34 ? T_34 extends T_31[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_31 : never : never; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: T_27[K_3] extends infer T_31 ? T_31 extends T_27[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? any : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_35 ? T_35 extends T_34[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_35 ? T_35 extends T_33[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_35 ? T_35 extends T_31[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_31 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_31 ? T_31 extends T_26[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? any : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_36 ? T_36 extends T_35[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_36 ? T_36 extends T_34[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_36 ? T_36 extends T_33[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_36 ? T_36 extends T_31[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_31 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_31 ? T_31 extends T_25[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? any : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_37 ? T_37 extends T_36[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_37 ? T_37 extends T_35[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_37 ? T_37 extends T_34[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_37 ? T_37 extends T_33[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_37 ? T_37 extends T_31[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_31 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_31 ? T_31 extends T_23[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? any : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_38 ? T_38 extends T_37[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_38 ? T_38 extends T_36[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_38 ? T_38 extends T_35[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_38 ? T_38 extends T_34[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_38 ? T_38 extends T_33[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_38 ? T_38 extends T_31[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_31 : never : never; } : T_23 : never : never; } : T_15 : never : never : T_14 extends (infer U)[] ? any[] : T_14 extends object ? { [K_2 in keyof T_14]-?: T_14[K_2] extends infer T_23 ? T_23 extends T_14[K_2] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_3 in keyof T_31]-?: any; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_3 in keyof T_30]-?: T_30[K_3] extends infer T_32 ? T_32 extends T_30[K_3] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_33 ? T_33 extends T_32[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_32 : never : never; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_3 in keyof T_29]-?: T_29[K_3] extends infer T_32 ? T_32 extends T_29[K_3] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? any : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_35 ? T_35 extends T_34[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_34 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_35 ? T_35 extends T_32[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_32 : never : never; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_3 in keyof T_28]-?: T_28[K_3] extends infer T_32 ? T_32 extends T_28[K_3] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? any : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_36 ? T_36 extends T_35[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_36 ? T_36 extends T_34[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_34 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_36 ? T_36 extends T_32[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_32 : never : never; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: T_27[K_3] extends infer T_32 ? T_32 extends T_27[K_3] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? any : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_37 ? T_37 extends T_36[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_37 ? T_37 extends T_35[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_37 ? T_37 extends T_34[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_34 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_37 ? T_37 extends T_32[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_32 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_32 ? T_32 extends T_26[K_3] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? any : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_38 ? T_38 extends T_37[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_38 ? T_38 extends T_36[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_38 ? T_38 extends T_35[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_38 ? T_38 extends T_34[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_34 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_38 ? T_38 extends T_32[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_32 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_32 ? T_32 extends T_25[K_3] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? T_37[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_38 ? T_38 extends T_37[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_38 extends CanBeExpanded ? any : T_38 extends (infer U)[] ? any[] : T_38 extends object ? { [K_4 in keyof T_38]-?: T_38[K_4] extends infer T_39 ? T_39 extends T_38[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_38 : never : never : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_39 ? T_39 extends T_37[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_39 ? T_39 extends T_36[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_39 ? T_39 extends T_35[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_39 ? T_39 extends T_34[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_34 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_39 ? T_39 extends T_32[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_32 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_32 ? T_32 extends T_23[K_3] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? T_37[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_38 ? T_38 extends T_37[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_38 extends CanBeExpanded ? T_38[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_39 ? T_39 extends T_38[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_39 extends CanBeExpanded ? any : T_39 extends (infer U)[] ? any[] : T_39 extends object ? { [K_4 in keyof T_39]-?: T_39[K_4] extends infer T_40 ? T_40 extends T_39[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_39 : never : never : T_38 extends (infer U)[] ? any[] : T_38 extends object ? { [K_4 in keyof T_38]-?: T_38[K_4] extends infer T_40 ? T_40 extends T_38[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_38 : never : never : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_40 ? T_40 extends T_37[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_40 ? T_40 extends T_36[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_40 ? T_40 extends T_35[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_40 ? T_40 extends T_34[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_34 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_40 ? T_40 extends T_32[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_32 : never : never; } : T_23 : never : never; } : T_14 : never : never : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: T_12[K_2] extends infer T_23 ? T_23 extends T_12[K_2] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_3 in keyof T_32]-?: any; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_3 in keyof T_31]-?: T_31[K_3] extends infer T_33 ? T_33 extends T_31[K_3] ? T_33 extends CanBeExpanded ? any : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_34 ? T_34 extends T_33[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_33 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_3 in keyof T_30]-?: T_30[K_3] extends infer T_33 ? T_33 extends T_30[K_3] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? any : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_36 ? T_36 extends T_35[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_35 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_36 ? T_36 extends T_33[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_33 : never : never; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_3 in keyof T_29]-?: T_29[K_3] extends infer T_33 ? T_33 extends T_29[K_3] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? any : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_37 ? T_37 extends T_36[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_37 ? T_37 extends T_35[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_35 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_37 ? T_37 extends T_33[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_33 : never : never; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_3 in keyof T_28]-?: T_28[K_3] extends infer T_33 ? T_33 extends T_28[K_3] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? any : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_38 ? T_38 extends T_37[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_38 ? T_38 extends T_36[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_38 ? T_38 extends T_35[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_35 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_38 ? T_38 extends T_33[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_33 : never : never; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: T_27[K_3] extends infer T_33 ? T_33 extends T_27[K_3] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? T_37[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_38 ? T_38 extends T_37[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_38 extends CanBeExpanded ? any : T_38 extends (infer U)[] ? any[] : T_38 extends object ? { [K_4 in keyof T_38]-?: T_38[K_4] extends infer T_39 ? T_39 extends T_38[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_38 : never : never : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_39 ? T_39 extends T_37[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_39 ? T_39 extends T_36[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_39 ? T_39 extends T_35[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_35 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_39 ? T_39 extends T_33[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_33 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_33 ? T_33 extends T_26[K_3] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? T_37[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_38 ? T_38 extends T_37[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_38 extends CanBeExpanded ? T_38[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_39 ? T_39 extends T_38[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_39 extends CanBeExpanded ? any : T_39 extends (infer U)[] ? any[] : T_39 extends object ? { [K_4 in keyof T_39]-?: T_39[K_4] extends infer T_40 ? T_40 extends T_39[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_39 : never : never : T_38 extends (infer U)[] ? any[] : T_38 extends object ? { [K_4 in keyof T_38]-?: T_38[K_4] extends infer T_40 ? T_40 extends T_38[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_38 : never : never : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_40 ? T_40 extends T_37[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_40 ? T_40 extends T_36[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_40 ? T_40 extends T_35[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_35 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_40 ? T_40 extends T_33[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_33 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_33 ? T_33 extends T_25[K_3] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? T_37[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_38 ? T_38 extends T_37[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_38 extends CanBeExpanded ? T_38[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_39 ? T_39 extends T_38[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_39 extends CanBeExpanded ? T_39[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_40 ? T_40 extends T_39[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_40 extends CanBeExpanded ? any : T_40 extends (infer U)[] ? any[] : T_40 extends object ? { [K_4 in keyof T_40]-?: T_40[K_4] extends infer T_41 ? T_41 extends T_40[K_4] ? T_41 extends CanBeExpanded ? T_41["default"] : T_41 : never : never; } : T_40 : never : never : T_39 extends (infer U)[] ? any[] : T_39 extends object ? { [K_4 in keyof T_39]-?: T_39[K_4] extends infer T_41 ? T_41 extends T_39[K_4] ? T_41 extends CanBeExpanded ? T_41["default"] : T_41 : never : never; } : T_39 : never : never : T_38 extends (infer U)[] ? any[] : T_38 extends object ? { [K_4 in keyof T_38]-?: T_38[K_4] extends infer T_41 ? T_41 extends T_38[K_4] ? T_41 extends CanBeExpanded ? T_41["default"] : T_41 : never : never; } : T_38 : never : never : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_41 ? T_41 extends T_37[K_4] ? T_41 extends CanBeExpanded ? T_41["default"] : T_41 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_41 ? T_41 extends T_36[K_4] ? T_41 extends CanBeExpanded ? T_41["default"] : T_41 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_41 ? T_41 extends T_35[K_4] ? T_41 extends CanBeExpanded ? T_41["default"] : T_41 : never : never; } : T_35 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_41 ? T_41 extends T_33[K_4] ? T_41 extends CanBeExpanded ? T_41["default"] : T_41 : never : never; } : T_33 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_33 ? T_33 extends T_23[K_3] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? T_37[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_38 ? T_38 extends T_37[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_38 extends CanBeExpanded ? T_38[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_39 ? T_39 extends T_38[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_39 extends CanBeExpanded ? T_39[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_40 ? T_40 extends T_39[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_40 extends CanBeExpanded ? T_40[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_41 ? T_41 extends T_40[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_41 extends CanBeExpanded ? any : T_41 extends (infer U)[] ? any[] : T_41 extends object ? { [K_4 in keyof T_41]-?: T_41[K_4] extends infer T_42 ? T_42 extends T_41[K_4] ? T_42 extends CanBeExpanded ? T_42["default"] : T_42 : never : never; } : T_41 : never : never : T_40 extends (infer U)[] ? any[] : T_40 extends object ? { [K_4 in keyof T_40]-?: T_40[K_4] extends infer T_42 ? T_42 extends T_40[K_4] ? T_42 extends CanBeExpanded ? T_42["default"] : T_42 : never : never; } : T_40 : never : never : T_39 extends (infer U)[] ? any[] : T_39 extends object ? { [K_4 in keyof T_39]-?: T_39[K_4] extends infer T_42 ? T_42 extends T_39[K_4] ? T_42 extends CanBeExpanded ? T_42["default"] : T_42 : never : never; } : T_39 : never : never : T_38 extends (infer U)[] ? any[] : T_38 extends object ? { [K_4 in keyof T_38]-?: T_38[K_4] extends infer T_42 ? T_42 extends T_38[K_4] ? T_42 extends CanBeExpanded ? T_42["default"] : T_42 : never : never; } : T_38 : never : never : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_42 ? T_42 extends T_37[K_4] ? T_42 extends CanBeExpanded ? T_42["default"] : T_42 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_42 ? T_42 extends T_36[K_4] ? T_42 extends CanBeExpanded ? T_42["default"] : T_42 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_42 ? T_42 extends T_35[K_4] ? T_42 extends CanBeExpanded ? T_42["default"] : T_42 : never : never; } : T_35 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_42 ? T_42 extends T_33[K_4] ? T_42 extends CanBeExpanded ? T_42["default"] : T_42 : never : never; } : T_33 : never : never; } : T_23 : never : never; } : T_12 : never : never; } : T +>UseQueryOptions : T extends CanBeExpanded ? T["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_2 ? T_2 extends T["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_2 extends CanBeExpanded ? T_2["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_3 ? T_3 extends T_2["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_3 extends CanBeExpanded ? T_3["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_4 ? T_4 extends T_3["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_4 extends CanBeExpanded ? T_4["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_5 ? T_5 extends T_4["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_5 extends CanBeExpanded ? T_5["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_6 ? T_6 extends T_5["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_6 extends CanBeExpanded ? T_6["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_7 ? T_7 extends T_6["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_7 extends CanBeExpanded ? T_7["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_8 ? T_8 extends T_7["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_8 extends CanBeExpanded ? T_8["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_9 ? T_9 extends T_8["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_9 extends CanBeExpanded ? T_9["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_10 ? T_10 extends T_9["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_10 extends CanBeExpanded ? T_10["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_11 ? T_11 extends T_10["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_11 extends CanBeExpanded ? any : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any type UseQueryOptions2 = Expand_ ->UseQueryOptions2 : T extends CanBeExpanded ? T["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_2 ? T_2 extends T["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_2 extends CanBeExpanded ? T_2["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_3 ? T_3 extends T_2["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_3 extends CanBeExpanded ? T_3["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_4 ? T_4 extends T_3["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_4 extends CanBeExpanded ? T_4["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_5 ? T_5 extends T_4["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_5 extends CanBeExpanded ? T_5["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_6 ? T_6 extends T_5["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_6 extends CanBeExpanded ? T_6["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_7 ? T_7 extends T_6["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_7 extends CanBeExpanded ? T_7["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_8 ? T_8 extends T_7["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_8 extends CanBeExpanded ? T_8["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_9 ? T_9 extends T_8["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_9 extends CanBeExpanded ? T_9["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_10 ? T_10 extends T_9["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_10 extends CanBeExpanded ? T_10["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_11 ? T_11 extends T_10["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_11 extends CanBeExpanded ? any : T_11 extends (infer U)[] ? any[] : T_11 extends object ? { [K_1 in keyof T_11]-?: any; } : T_11 : never : never : T_10 extends (infer U)[] ? any[] : T_10 extends object ? { [K_1 in keyof T_10]-?: T_10[K_1] extends infer T_12 ? T_12 extends T_10[K_1] ? T_12 extends CanBeExpanded ? any : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: any; } : T_12 : never : never; } : T_10 : never : never : T_9 extends (infer U)[] ? any[] : T_9 extends object ? { [K_1 in keyof T_9]-?: T_9[K_1] extends infer T_12 ? T_12 extends T_9[K_1] ? T_12 extends CanBeExpanded ? T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? any : T_14 extends (infer U)[] ? any[] : T_14 extends object ? { [K_2 in keyof T_14]-?: any; } : T_14 : never : never : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: T_12[K_2] extends infer T_15 ? T_15 extends T_12[K_2] ? T_15 extends CanBeExpanded ? any : T_15 extends (infer U)[] ? any[] : T_15 extends object ? { [K_3 in keyof T_15]-?: any; } : T_15 : never : never; } : T_12 : never : never; } : T_9 : never : never : T_8 extends (infer U)[] ? any[] : T_8 extends object ? { [K_1 in keyof T_8]-?: T_8[K_1] extends infer T_12 ? T_12 extends T_8[K_1] ? T_12 extends CanBeExpanded ? T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_15 ? T_15 extends T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_15 extends CanBeExpanded ? any : T_15 extends (infer U)[] ? any[] : T_15 extends object ? { [K_2 in keyof T_15]-?: any; } : T_15 : never : never : T_14 extends (infer U)[] ? any[] : T_14 extends object ? { [K_2 in keyof T_14]-?: T_14[K_2] extends infer T_16 ? T_16 extends T_14[K_2] ? T_16 extends CanBeExpanded ? any : T_16 extends (infer U)[] ? any[] : T_16 extends object ? { [K_3 in keyof T_16]-?: any; } : T_16 : never : never; } : T_14 : never : never : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: T_12[K_2] extends infer T_16 ? T_16 extends T_12[K_2] ? T_16 extends CanBeExpanded ? T_16[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_17 ? T_17 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_17 extends SplitAC ? "value" : "default" : never : never] extends infer T_18 ? T_18 extends T_16[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_17 ? T_17 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_17 extends SplitAC ? "value" : "default" : never : never] ? T_18 extends CanBeExpanded ? any : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_3 in keyof T_18]-?: any; } : T_18 : never : never : T_16 extends (infer U)[] ? any[] : T_16 extends object ? { [K_3 in keyof T_16]-?: T_16[K_3] extends infer T_19 ? T_19 extends T_16[K_3] ? T_19 extends CanBeExpanded ? any : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_4 in keyof T_19]-?: T_19[K_4] extends infer T_20 ? T_20 extends T_19[K_4] ? T_20 extends CanBeExpanded ? T_20["default"] : T_20 : never : never; } : T_19 : never : never; } : T_16 : never : never; } : T_12 : never : never; } : T_8 : never : never : T_7 extends (infer U)[] ? any[] : T_7 extends object ? { [K_1 in keyof T_7]-?: T_7[K_1] extends infer T_12 ? T_12 extends T_7[K_1] ? T_12 extends CanBeExpanded ? T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_15 ? T_15 extends T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_15 extends CanBeExpanded ? T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_16 ? T_16 extends T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_16 extends CanBeExpanded ? any : T_16 extends (infer U)[] ? any[] : T_16 extends object ? { [K_2 in keyof T_16]-?: any; } : T_16 : never : never : T_15 extends (infer U)[] ? any[] : T_15 extends object ? { [K_2 in keyof T_15]-?: T_15[K_2] extends infer T_17 ? T_17 extends T_15[K_2] ? T_17 extends CanBeExpanded ? any : T_17 extends (infer U)[] ? any[] : T_17 extends object ? { [K_3 in keyof T_17]-?: any; } : T_17 : never : never; } : T_15 : never : never : T_14 extends (infer U)[] ? any[] : T_14 extends object ? { [K_2 in keyof T_14]-?: T_14[K_2] extends infer T_17 ? T_17 extends T_14[K_2] ? T_17 extends CanBeExpanded ? T_17[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_18 ? T_18 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_18 extends SplitAC ? "value" : "default" : never : never] extends infer T_19 ? T_19 extends T_17[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_18 ? T_18 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_18 extends SplitAC ? "value" : "default" : never : never] ? T_19 extends CanBeExpanded ? any : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_3 in keyof T_19]-?: any; } : T_19 : never : never : T_17 extends (infer U)[] ? any[] : T_17 extends object ? { [K_3 in keyof T_17]-?: T_17[K_3] extends infer T_20 ? T_20 extends T_17[K_3] ? T_20 extends CanBeExpanded ? any : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_4 in keyof T_20]-?: T_20[K_4] extends infer T_21 ? T_21 extends T_20[K_4] ? T_21 extends CanBeExpanded ? T_21["default"] : T_21 : never : never; } : T_20 : never : never; } : T_17 : never : never; } : T_14 : never : never : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: T_12[K_2] extends infer T_17 ? T_17 extends T_12[K_2] ? T_17 extends CanBeExpanded ? T_17[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_18 ? T_18 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_18 extends SplitAC ? "value" : "default" : never : never] extends infer T_19 ? T_19 extends T_17[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_18 ? T_18 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_18 extends SplitAC ? "value" : "default" : never : never] ? T_19 extends CanBeExpanded ? T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_18 ? T_18 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_18 extends SplitAC ? "value" : "default" : never : never] extends infer T_20 ? T_20 extends T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_18 ? T_18 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_18 extends SplitAC ? "value" : "default" : never : never] ? T_20 extends CanBeExpanded ? any : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: any; } : T_20 : never : never : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_3 in keyof T_19]-?: T_19[K_3] extends infer T_21 ? T_21 extends T_19[K_3] ? T_21 extends CanBeExpanded ? any : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_4 in keyof T_21]-?: T_21[K_4] extends infer T_22 ? T_22 extends T_21[K_4] ? T_22 extends CanBeExpanded ? T_22["default"] : T_22 : never : never; } : T_21 : never : never; } : T_19 : never : never : T_17 extends (infer U)[] ? any[] : T_17 extends object ? { [K_3 in keyof T_17]-?: T_17[K_3] extends infer T_21 ? T_21 extends T_17[K_3] ? T_21 extends CanBeExpanded ? T_21[PrefixWith, K_3, "."> extends infer T_22 ? T_22 extends PrefixWith, K_3, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_21[PrefixWith, K_3, "."> extends infer T_22 ? T_22 extends PrefixWith, K_3, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? any : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_4 in keyof T_23]-?: T_23[K_4] extends infer T_24 ? T_24 extends T_23[K_4] ? T_24 extends CanBeExpanded ? T_24["default"] : T_24 : never : never; } : T_23 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_4 in keyof T_21]-?: T_21[K_4] extends infer T_24 ? T_24 extends T_21[K_4] ? T_24 extends CanBeExpanded ? T_24["default"] : T_24 : never : never; } : T_21 : never : never; } : T_17 : never : never; } : T_12 : never : never; } : T_7 : never : never : T_6 extends (infer U)[] ? any[] : T_6 extends object ? { [K_1 in keyof T_6]-?: T_6[K_1] extends infer T_12 ? T_12 extends T_6[K_1] ? T_12 extends CanBeExpanded ? T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_15 ? T_15 extends T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_15 extends CanBeExpanded ? T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_16 ? T_16 extends T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_16 extends CanBeExpanded ? T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_17 ? T_17 extends T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_17 extends CanBeExpanded ? any : T_17 extends (infer U)[] ? any[] : T_17 extends object ? { [K_2 in keyof T_17]-?: any; } : T_17 : never : never : T_16 extends (infer U)[] ? any[] : T_16 extends object ? { [K_2 in keyof T_16]-?: T_16[K_2] extends infer T_18 ? T_18 extends T_16[K_2] ? T_18 extends CanBeExpanded ? any : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_3 in keyof T_18]-?: any; } : T_18 : never : never; } : T_16 : never : never : T_15 extends (infer U)[] ? any[] : T_15 extends object ? { [K_2 in keyof T_15]-?: T_15[K_2] extends infer T_18 ? T_18 extends T_15[K_2] ? T_18 extends CanBeExpanded ? T_18[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] extends infer T_20 ? T_20 extends T_18[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] ? T_20 extends CanBeExpanded ? any : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: any; } : T_20 : never : never : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_3 in keyof T_18]-?: T_18[K_3] extends infer T_21 ? T_21 extends T_18[K_3] ? T_21 extends CanBeExpanded ? any : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_4 in keyof T_21]-?: T_21[K_4] extends infer T_22 ? T_22 extends T_21[K_4] ? T_22 extends CanBeExpanded ? T_22["default"] : T_22 : never : never; } : T_21 : never : never; } : T_18 : never : never; } : T_15 : never : never : T_14 extends (infer U)[] ? any[] : T_14 extends object ? { [K_2 in keyof T_14]-?: T_14[K_2] extends infer T_18 ? T_18 extends T_14[K_2] ? T_18 extends CanBeExpanded ? T_18[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] extends infer T_20 ? T_20 extends T_18[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] ? T_20 extends CanBeExpanded ? T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] extends infer T_21 ? T_21 extends T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] ? T_21 extends CanBeExpanded ? any : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: any; } : T_21 : never : never : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: T_20[K_3] extends infer T_22 ? T_22 extends T_20[K_3] ? T_22 extends CanBeExpanded ? any : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_4 in keyof T_22]-?: T_22[K_4] extends infer T_23 ? T_23 extends T_22[K_4] ? T_23 extends CanBeExpanded ? T_23["default"] : T_23 : never : never; } : T_22 : never : never; } : T_20 : never : never : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_3 in keyof T_18]-?: T_18[K_3] extends infer T_22 ? T_22 extends T_18[K_3] ? T_22 extends CanBeExpanded ? T_22[PrefixWith, K_3, "."> extends infer T_23 ? T_23 extends PrefixWith, K_3, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_22[PrefixWith, K_3, "."> extends infer T_23 ? T_23 extends PrefixWith, K_3, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? any : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_4 in keyof T_24]-?: T_24[K_4] extends infer T_25 ? T_25 extends T_24[K_4] ? T_25 extends CanBeExpanded ? T_25["default"] : T_25 : never : never; } : T_24 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_4 in keyof T_22]-?: T_22[K_4] extends infer T_25 ? T_25 extends T_22[K_4] ? T_25 extends CanBeExpanded ? T_25["default"] : T_25 : never : never; } : T_22 : never : never; } : T_18 : never : never; } : T_14 : never : never : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: T_12[K_2] extends infer T_18 ? T_18 extends T_12[K_2] ? T_18 extends CanBeExpanded ? T_18[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] extends infer T_20 ? T_20 extends T_18[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] ? T_20 extends CanBeExpanded ? T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] extends infer T_21 ? T_21 extends T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_19 ? T_19 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_19 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? any : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: any; } : T_22 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_23 ? T_23 extends T_21[K_3] ? T_23 extends CanBeExpanded ? any : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_4 in keyof T_23]-?: T_23[K_4] extends infer T_24 ? T_24 extends T_23[K_4] ? T_24 extends CanBeExpanded ? T_24["default"] : T_24 : never : never; } : T_23 : never : never; } : T_21 : never : never : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: T_20[K_3] extends infer T_23 ? T_23 extends T_20[K_3] ? T_23 extends CanBeExpanded ? T_23[PrefixWith, K_3, "."> extends infer T_24 ? T_24 extends PrefixWith, K_3, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith, K_3, "."> extends infer T_24 ? T_24 extends PrefixWith, K_3, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_26 ? T_26 extends T_25[K_4] ? T_26 extends CanBeExpanded ? T_26["default"] : T_26 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_4 in keyof T_23]-?: T_23[K_4] extends infer T_26 ? T_26 extends T_23[K_4] ? T_26 extends CanBeExpanded ? T_26["default"] : T_26 : never : never; } : T_23 : never : never; } : T_20 : never : never : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_3 in keyof T_18]-?: T_18[K_3] extends infer T_23 ? T_23 extends T_18[K_3] ? T_23 extends CanBeExpanded ? T_23[PrefixWith, K_3, "."> extends infer T_24 ? T_24 extends PrefixWith, K_3, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith, K_3, "."> extends infer T_24 ? T_24 extends PrefixWith, K_3, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith, K_3, "."> extends infer T_24 ? T_24 extends PrefixWith, K_3, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith, K_3, "."> extends infer T_24 ? T_24 extends PrefixWith, K_3, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_27 ? T_27 extends T_26[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_27 ? T_27 extends T_25[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_4 in keyof T_23]-?: T_23[K_4] extends infer T_27 ? T_27 extends T_23[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_23 : never : never; } : T_18 : never : never; } : T_12 : never : never; } : T_6 : never : never : T_5 extends (infer U)[] ? any[] : T_5 extends object ? { [K_1 in keyof T_5]-?: T_5[K_1] extends infer T_12 ? T_12 extends T_5[K_1] ? T_12 extends CanBeExpanded ? T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_15 ? T_15 extends T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_15 extends CanBeExpanded ? T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_16 ? T_16 extends T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_16 extends CanBeExpanded ? T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_17 ? T_17 extends T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_17 extends CanBeExpanded ? T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_18 ? T_18 extends T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_18 extends CanBeExpanded ? any : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_2 in keyof T_18]-?: any; } : T_18 : never : never : T_17 extends (infer U)[] ? any[] : T_17 extends object ? { [K_2 in keyof T_17]-?: T_17[K_2] extends infer T_19 ? T_19 extends T_17[K_2] ? T_19 extends CanBeExpanded ? any : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_3 in keyof T_19]-?: any; } : T_19 : never : never; } : T_17 : never : never : T_16 extends (infer U)[] ? any[] : T_16 extends object ? { [K_2 in keyof T_16]-?: T_16[K_2] extends infer T_19 ? T_19 extends T_16[K_2] ? T_19 extends CanBeExpanded ? T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_21 ? T_21 extends T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_21 extends CanBeExpanded ? any : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: any; } : T_21 : never : never : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_3 in keyof T_19]-?: T_19[K_3] extends infer T_22 ? T_22 extends T_19[K_3] ? T_22 extends CanBeExpanded ? any : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_4 in keyof T_22]-?: T_22[K_4] extends infer T_23 ? T_23 extends T_22[K_4] ? T_23 extends CanBeExpanded ? T_23["default"] : T_23 : never : never; } : T_22 : never : never; } : T_19 : never : never; } : T_16 : never : never : T_15 extends (infer U)[] ? any[] : T_15 extends object ? { [K_2 in keyof T_15]-?: T_15[K_2] extends infer T_19 ? T_19 extends T_15[K_2] ? T_19 extends CanBeExpanded ? T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_21 ? T_21 extends T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? any : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: any; } : T_22 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_23 ? T_23 extends T_21[K_3] ? T_23 extends CanBeExpanded ? any : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_4 in keyof T_23]-?: T_23[K_4] extends infer T_24 ? T_24 extends T_23[K_4] ? T_24 extends CanBeExpanded ? T_24["default"] : T_24 : never : never; } : T_23 : never : never; } : T_21 : never : never : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_3 in keyof T_19]-?: T_19[K_3] extends infer T_23 ? T_23 extends T_19[K_3] ? T_23 extends CanBeExpanded ? T_23[PrefixWith, K_3, "."> extends infer T_24 ? T_24 extends PrefixWith, K_3, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith, K_3, "."> extends infer T_24 ? T_24 extends PrefixWith, K_3, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_26 ? T_26 extends T_25[K_4] ? T_26 extends CanBeExpanded ? T_26["default"] : T_26 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_4 in keyof T_23]-?: T_23[K_4] extends infer T_26 ? T_26 extends T_23[K_4] ? T_26 extends CanBeExpanded ? T_26["default"] : T_26 : never : never; } : T_23 : never : never; } : T_19 : never : never; } : T_15 : never : never : T_14 extends (infer U)[] ? any[] : T_14 extends object ? { [K_2 in keyof T_14]-?: T_14[K_2] extends infer T_19 ? T_19 extends T_14[K_2] ? T_19 extends CanBeExpanded ? T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_21 ? T_21 extends T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? any : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: any; } : T_23 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_24 ? T_24 extends T_22[K_3] ? T_24 extends CanBeExpanded ? any : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_4 in keyof T_24]-?: T_24[K_4] extends infer T_25 ? T_25 extends T_24[K_4] ? T_25 extends CanBeExpanded ? T_25["default"] : T_25 : never : never; } : T_24 : never : never; } : T_22 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_24 ? T_24 extends T_21[K_3] ? T_24 extends CanBeExpanded ? T_24[PrefixWith, K_3, "."> extends infer T_25 ? T_25 extends PrefixWith, K_3, "."> ? T_25 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_24[PrefixWith, K_3, "."> extends infer T_25 ? T_25 extends PrefixWith, K_3, "."> ? T_25 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_27 ? T_27 extends T_26[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_26 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_4 in keyof T_24]-?: T_24[K_4] extends infer T_27 ? T_27 extends T_24[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_24 : never : never; } : T_21 : never : never : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_3 in keyof T_19]-?: T_19[K_3] extends infer T_24 ? T_24 extends T_19[K_3] ? T_24 extends CanBeExpanded ? T_24[PrefixWith, K_3, "."> extends infer T_25 ? T_25 extends PrefixWith, K_3, "."> ? T_25 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_24[PrefixWith, K_3, "."> extends infer T_25 ? T_25 extends PrefixWith, K_3, "."> ? T_25 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith, K_3, "."> extends infer T_25 ? T_25 extends PrefixWith, K_3, "."> ? T_25 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith, K_3, "."> extends infer T_25 ? T_25 extends PrefixWith, K_3, "."> ? T_25 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_28 ? T_28 extends T_27[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_28 ? T_28 extends T_26[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_26 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_4 in keyof T_24]-?: T_24[K_4] extends infer T_28 ? T_28 extends T_24[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_24 : never : never; } : T_19 : never : never; } : T_14 : never : never : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: T_12[K_2] extends infer T_19 ? T_19 extends T_12[K_2] ? T_19 extends CanBeExpanded ? T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_21 ? T_21 extends T_19[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_20 ? T_20 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_20 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? any : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: any; } : T_24 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_25 ? T_25 extends T_23[K_3] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_26 ? T_26 extends T_25[K_4] ? T_26 extends CanBeExpanded ? T_26["default"] : T_26 : never : never; } : T_25 : never : never; } : T_23 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_25 ? T_25 extends T_22[K_3] ? T_25 extends CanBeExpanded ? T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_28 ? T_28 extends T_27[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_27 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_28 ? T_28 extends T_25[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_25 : never : never; } : T_22 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_25 ? T_25 extends T_21[K_3] ? T_25 extends CanBeExpanded ? T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_29 ? T_29 extends T_28[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_29 ? T_29 extends T_27[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_27 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_29 ? T_29 extends T_25[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_25 : never : never; } : T_21 : never : never : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_3 in keyof T_19]-?: T_19[K_3] extends infer T_25 ? T_25 extends T_19[K_3] ? T_25 extends CanBeExpanded ? T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_30 ? T_30 extends T_28[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_30 ? T_30 extends T_27[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_27 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_30 ? T_30 extends T_25[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_25 : never : never; } : T_19 : never : never; } : T_12 : never : never; } : T_5 : never : never : T_4 extends (infer U)[] ? any[] : T_4 extends object ? { [K_1 in keyof T_4]-?: T_4[K_1] extends infer T_12 ? T_12 extends T_4[K_1] ? T_12 extends CanBeExpanded ? T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_15 ? T_15 extends T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_15 extends CanBeExpanded ? T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_16 ? T_16 extends T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_16 extends CanBeExpanded ? T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_17 ? T_17 extends T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_17 extends CanBeExpanded ? T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_18 ? T_18 extends T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_18 extends CanBeExpanded ? T_18[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_19 ? T_19 extends T_18[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_19 extends CanBeExpanded ? any : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_2 in keyof T_19]-?: any; } : T_19 : never : never : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_2 in keyof T_18]-?: T_18[K_2] extends infer T_20 ? T_20 extends T_18[K_2] ? T_20 extends CanBeExpanded ? any : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: any; } : T_20 : never : never; } : T_18 : never : never : T_17 extends (infer U)[] ? any[] : T_17 extends object ? { [K_2 in keyof T_17]-?: T_17[K_2] extends infer T_20 ? T_20 extends T_17[K_2] ? T_20 extends CanBeExpanded ? T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? any : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: any; } : T_22 : never : never : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: T_20[K_3] extends infer T_23 ? T_23 extends T_20[K_3] ? T_23 extends CanBeExpanded ? any : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_4 in keyof T_23]-?: T_23[K_4] extends infer T_24 ? T_24 extends T_23[K_4] ? T_24 extends CanBeExpanded ? T_24["default"] : T_24 : never : never; } : T_23 : never : never; } : T_20 : never : never; } : T_17 : never : never : T_16 extends (infer U)[] ? any[] : T_16 extends object ? { [K_2 in keyof T_16]-?: T_16[K_2] extends infer T_20 ? T_20 extends T_16[K_2] ? T_20 extends CanBeExpanded ? T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? any : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: any; } : T_23 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_24 ? T_24 extends T_22[K_3] ? T_24 extends CanBeExpanded ? any : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_4 in keyof T_24]-?: T_24[K_4] extends infer T_25 ? T_25 extends T_24[K_4] ? T_25 extends CanBeExpanded ? T_25["default"] : T_25 : never : never; } : T_24 : never : never; } : T_22 : never : never : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: T_20[K_3] extends infer T_24 ? T_24 extends T_20[K_3] ? T_24 extends CanBeExpanded ? T_24[PrefixWith, K_3, "."> extends infer T_25 ? T_25 extends PrefixWith, K_3, "."> ? T_25 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_24[PrefixWith, K_3, "."> extends infer T_25 ? T_25 extends PrefixWith, K_3, "."> ? T_25 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_27 ? T_27 extends T_26[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_26 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_4 in keyof T_24]-?: T_24[K_4] extends infer T_27 ? T_27 extends T_24[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_24 : never : never; } : T_20 : never : never; } : T_16 : never : never : T_15 extends (infer U)[] ? any[] : T_15 extends object ? { [K_2 in keyof T_15]-?: T_15[K_2] extends infer T_20 ? T_20 extends T_15[K_2] ? T_20 extends CanBeExpanded ? T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? any : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: any; } : T_24 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_25 ? T_25 extends T_23[K_3] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_26 ? T_26 extends T_25[K_4] ? T_26 extends CanBeExpanded ? T_26["default"] : T_26 : never : never; } : T_25 : never : never; } : T_23 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_25 ? T_25 extends T_22[K_3] ? T_25 extends CanBeExpanded ? T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_28 ? T_28 extends T_27[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_27 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_28 ? T_28 extends T_25[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_25 : never : never; } : T_22 : never : never : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: T_20[K_3] extends infer T_25 ? T_25 extends T_20[K_3] ? T_25 extends CanBeExpanded ? T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_29 ? T_29 extends T_28[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_29 ? T_29 extends T_27[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_27 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_29 ? T_29 extends T_25[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_25 : never : never; } : T_20 : never : never; } : T_15 : never : never : T_14 extends (infer U)[] ? any[] : T_14 extends object ? { [K_2 in keyof T_14]-?: T_14[K_2] extends infer T_20 ? T_20 extends T_14[K_2] ? T_20 extends CanBeExpanded ? T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: any; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_26 ? T_26 extends T_24[K_3] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_27 ? T_27 extends T_26[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_26 : never : never; } : T_24 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_26 ? T_26 extends T_23[K_3] ? T_26 extends CanBeExpanded ? T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_29 ? T_29 extends T_28[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_28 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_29 ? T_29 extends T_26[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_26 : never : never; } : T_23 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_26 ? T_26 extends T_22[K_3] ? T_26 extends CanBeExpanded ? T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_30 ? T_30 extends T_28[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_28 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_30 ? T_30 extends T_26[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_26 : never : never; } : T_22 : never : never : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: T_20[K_3] extends infer T_26 ? T_26 extends T_20[K_3] ? T_26 extends CanBeExpanded ? T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_31 ? T_31 extends T_30[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_31 ? T_31 extends T_29[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_31 ? T_31 extends T_28[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_28 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_31 ? T_31 extends T_26[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_26 : never : never; } : T_20 : never : never; } : T_14 : never : never : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: T_12[K_2] extends infer T_20 ? T_20 extends T_12[K_2] ? T_20 extends CanBeExpanded ? T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_20[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_21 ? T_21 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_21 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: any; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_27 ? T_27 extends T_25[K_3] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_28 ? T_28 extends T_27[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_27 : never : never; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_27 ? T_27 extends T_24[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_30 ? T_30 extends T_27[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_27 : never : never; } : T_24 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_27 ? T_27 extends T_23[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_31 ? T_31 extends T_30[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_31 ? T_31 extends T_29[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_31 ? T_31 extends T_27[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_27 : never : never; } : T_23 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_27 ? T_27 extends T_22[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_32 ? T_32 extends T_30[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_32 ? T_32 extends T_29[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_32 ? T_32 extends T_27[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_27 : never : never; } : T_22 : never : never : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_3 in keyof T_20]-?: T_20[K_3] extends infer T_27 ? T_27 extends T_20[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_33 ? T_33 extends T_32[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_33 ? T_33 extends T_31[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_33 ? T_33 extends T_30[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_33 ? T_33 extends T_29[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_33 ? T_33 extends T_27[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_27 : never : never; } : T_20 : never : never; } : T_12 : never : never; } : T_4 : never : never : T_3 extends (infer U)[] ? any[] : T_3 extends object ? { [K_1 in keyof T_3]-?: T_3[K_1] extends infer T_12 ? T_12 extends T_3[K_1] ? T_12 extends CanBeExpanded ? T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_15 ? T_15 extends T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_15 extends CanBeExpanded ? T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_16 ? T_16 extends T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_16 extends CanBeExpanded ? T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_17 ? T_17 extends T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_17 extends CanBeExpanded ? T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_18 ? T_18 extends T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_18 extends CanBeExpanded ? T_18[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_19 ? T_19 extends T_18[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_19 extends CanBeExpanded ? T_19[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_20 ? T_20 extends T_19[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_20 extends CanBeExpanded ? any : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_2 in keyof T_20]-?: any; } : T_20 : never : never : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_2 in keyof T_19]-?: T_19[K_2] extends infer T_21 ? T_21 extends T_19[K_2] ? T_21 extends CanBeExpanded ? any : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: any; } : T_21 : never : never; } : T_19 : never : never : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_2 in keyof T_18]-?: T_18[K_2] extends infer T_21 ? T_21 extends T_18[K_2] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? any : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: any; } : T_23 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_24 ? T_24 extends T_21[K_3] ? T_24 extends CanBeExpanded ? any : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_4 in keyof T_24]-?: T_24[K_4] extends infer T_25 ? T_25 extends T_24[K_4] ? T_25 extends CanBeExpanded ? T_25["default"] : T_25 : never : never; } : T_24 : never : never; } : T_21 : never : never; } : T_18 : never : never : T_17 extends (infer U)[] ? any[] : T_17 extends object ? { [K_2 in keyof T_17]-?: T_17[K_2] extends infer T_21 ? T_21 extends T_17[K_2] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? any : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: any; } : T_24 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_25 ? T_25 extends T_23[K_3] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_26 ? T_26 extends T_25[K_4] ? T_26 extends CanBeExpanded ? T_26["default"] : T_26 : never : never; } : T_25 : never : never; } : T_23 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_25 ? T_25 extends T_21[K_3] ? T_25 extends CanBeExpanded ? T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_25[PrefixWith, K_3, "."> extends infer T_26 ? T_26 extends PrefixWith, K_3, "."> ? T_26 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_28 ? T_28 extends T_27[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_27 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_28 ? T_28 extends T_25[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_25 : never : never; } : T_21 : never : never; } : T_17 : never : never : T_16 extends (infer U)[] ? any[] : T_16 extends object ? { [K_2 in keyof T_16]-?: T_16[K_2] extends infer T_21 ? T_21 extends T_16[K_2] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: any; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_26 ? T_26 extends T_24[K_3] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_27 ? T_27 extends T_26[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_26 : never : never; } : T_24 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_26 ? T_26 extends T_23[K_3] ? T_26 extends CanBeExpanded ? T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_29 ? T_29 extends T_28[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_28 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_29 ? T_29 extends T_26[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_26 : never : never; } : T_23 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_26 ? T_26 extends T_21[K_3] ? T_26 extends CanBeExpanded ? T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_30 ? T_30 extends T_28[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_28 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_30 ? T_30 extends T_26[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_26 : never : never; } : T_21 : never : never; } : T_16 : never : never : T_15 extends (infer U)[] ? any[] : T_15 extends object ? { [K_2 in keyof T_15]-?: T_15[K_2] extends infer T_21 ? T_21 extends T_15[K_2] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: any; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_27 ? T_27 extends T_25[K_3] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_28 ? T_28 extends T_27[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_27 : never : never; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_27 ? T_27 extends T_24[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_30 ? T_30 extends T_27[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_27 : never : never; } : T_24 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_27 ? T_27 extends T_23[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_31 ? T_31 extends T_30[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_31 ? T_31 extends T_29[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_31 ? T_31 extends T_27[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_27 : never : never; } : T_23 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_27 ? T_27 extends T_21[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_32 ? T_32 extends T_30[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_32 ? T_32 extends T_29[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_32 ? T_32 extends T_27[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_27 : never : never; } : T_21 : never : never; } : T_15 : never : never : T_14 extends (infer U)[] ? any[] : T_14 extends object ? { [K_2 in keyof T_14]-?: T_14[K_2] extends infer T_21 ? T_21 extends T_14[K_2] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: any; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_28 ? T_28 extends T_26[K_3] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_29 ? T_29 extends T_28[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_28 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_28 ? T_28 extends T_25[K_3] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_31 ? T_31 extends T_30[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_30 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_31 ? T_31 extends T_28[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_28 : never : never; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_28 ? T_28 extends T_24[K_3] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_32 ? T_32 extends T_30[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_30 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_32 ? T_32 extends T_28[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_28 : never : never; } : T_24 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_28 ? T_28 extends T_23[K_3] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_33 ? T_33 extends T_32[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_33 ? T_33 extends T_31[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_33 ? T_33 extends T_30[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_30 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_33 ? T_33 extends T_28[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_28 : never : never; } : T_23 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_28 ? T_28 extends T_21[K_3] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? any : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_34 ? T_34 extends T_33[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_34 ? T_34 extends T_32[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_34 ? T_34 extends T_31[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_34 ? T_34 extends T_30[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_30 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_34 ? T_34 extends T_28[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_28 : never : never; } : T_21 : never : never; } : T_14 : never : never : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: T_12[K_2] extends infer T_21 ? T_21 extends T_12[K_2] ? T_21 extends CanBeExpanded ? T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_23 ? T_23 extends T_21[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_22 ? T_22 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_22 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_3 in keyof T_28]-?: any; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: T_27[K_3] extends infer T_29 ? T_29 extends T_27[K_3] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_29 ? T_29 extends T_26[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_32 ? T_32 extends T_29[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_29 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_29 ? T_29 extends T_25[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_33 ? T_33 extends T_32[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_33 ? T_33 extends T_31[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_33 ? T_33 extends T_29[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_29 : never : never; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_29 ? T_29 extends T_24[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? any : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_34 ? T_34 extends T_33[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_34 ? T_34 extends T_32[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_34 ? T_34 extends T_31[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_34 ? T_34 extends T_29[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_29 : never : never; } : T_24 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_29 ? T_29 extends T_23[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? any : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_35 ? T_35 extends T_34[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_35 ? T_35 extends T_33[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_35 ? T_35 extends T_32[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_35 ? T_35 extends T_31[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_35 ? T_35 extends T_29[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_29 : never : never; } : T_23 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_3 in keyof T_21]-?: T_21[K_3] extends infer T_29 ? T_29 extends T_21[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? any : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_36 ? T_36 extends T_35[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_36 ? T_36 extends T_34[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_36 ? T_36 extends T_33[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_36 ? T_36 extends T_32[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_36 ? T_36 extends T_31[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_36 ? T_36 extends T_29[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_29 : never : never; } : T_21 : never : never; } : T_12 : never : never; } : T_3 : never : never : T_2 extends (infer U)[] ? any[] : T_2 extends object ? { [K_1 in keyof T_2]-?: T_2[K_1] extends infer T_12 ? T_12 extends T_2[K_1] ? T_12 extends CanBeExpanded ? T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_15 ? T_15 extends T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_15 extends CanBeExpanded ? T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_16 ? T_16 extends T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_16 extends CanBeExpanded ? T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_17 ? T_17 extends T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_17 extends CanBeExpanded ? T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_18 ? T_18 extends T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_18 extends CanBeExpanded ? T_18[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_19 ? T_19 extends T_18[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_19 extends CanBeExpanded ? T_19[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_20 ? T_20 extends T_19[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_20 extends CanBeExpanded ? T_20[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_21 ? T_21 extends T_20[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_21 extends CanBeExpanded ? any : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_2 in keyof T_21]-?: any; } : T_21 : never : never : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_2 in keyof T_20]-?: T_20[K_2] extends infer T_22 ? T_22 extends T_20[K_2] ? T_22 extends CanBeExpanded ? any : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: any; } : T_22 : never : never; } : T_20 : never : never : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_2 in keyof T_19]-?: T_19[K_2] extends infer T_22 ? T_22 extends T_19[K_2] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? any : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: any; } : T_24 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_25 ? T_25 extends T_22[K_3] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_4 in keyof T_25]-?: T_25[K_4] extends infer T_26 ? T_26 extends T_25[K_4] ? T_26 extends CanBeExpanded ? T_26["default"] : T_26 : never : never; } : T_25 : never : never; } : T_22 : never : never; } : T_19 : never : never : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_2 in keyof T_18]-?: T_18[K_2] extends infer T_22 ? T_22 extends T_18[K_2] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: any; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_26 ? T_26 extends T_24[K_3] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_27 ? T_27 extends T_26[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_26 : never : never; } : T_24 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_26 ? T_26 extends T_22[K_3] ? T_26 extends CanBeExpanded ? T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_26[PrefixWith, K_3, "."> extends infer T_27 ? T_27 extends PrefixWith, K_3, "."> ? T_27 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_29 ? T_29 extends T_28[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_28 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_29 ? T_29 extends T_26[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_26 : never : never; } : T_22 : never : never; } : T_18 : never : never : T_17 extends (infer U)[] ? any[] : T_17 extends object ? { [K_2 in keyof T_17]-?: T_17[K_2] extends infer T_22 ? T_22 extends T_17[K_2] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: any; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_27 ? T_27 extends T_25[K_3] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_28 ? T_28 extends T_27[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_27 : never : never; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_27 ? T_27 extends T_24[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_30 ? T_30 extends T_27[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_27 : never : never; } : T_24 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_27 ? T_27 extends T_22[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_31 ? T_31 extends T_30[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_31 ? T_31 extends T_29[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_31 ? T_31 extends T_27[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_27 : never : never; } : T_22 : never : never; } : T_17 : never : never : T_16 extends (infer U)[] ? any[] : T_16 extends object ? { [K_2 in keyof T_16]-?: T_16[K_2] extends infer T_22 ? T_22 extends T_16[K_2] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: any; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_28 ? T_28 extends T_26[K_3] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_29 ? T_29 extends T_28[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_28 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_28 ? T_28 extends T_25[K_3] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_31 ? T_31 extends T_30[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_30 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_31 ? T_31 extends T_28[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_28 : never : never; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_28 ? T_28 extends T_24[K_3] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_32 ? T_32 extends T_30[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_30 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_32 ? T_32 extends T_28[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_28 : never : never; } : T_24 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_28 ? T_28 extends T_22[K_3] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_33 ? T_33 extends T_32[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_33 ? T_33 extends T_31[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_33 ? T_33 extends T_30[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_30 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_33 ? T_33 extends T_28[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_28 : never : never; } : T_22 : never : never; } : T_16 : never : never : T_15 extends (infer U)[] ? any[] : T_15 extends object ? { [K_2 in keyof T_15]-?: T_15[K_2] extends infer T_22 ? T_22 extends T_15[K_2] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_3 in keyof T_28]-?: any; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: T_27[K_3] extends infer T_29 ? T_29 extends T_27[K_3] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_29 ? T_29 extends T_26[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_32 ? T_32 extends T_29[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_29 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_29 ? T_29 extends T_25[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_33 ? T_33 extends T_32[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_33 ? T_33 extends T_31[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_33 ? T_33 extends T_29[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_29 : never : never; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_29 ? T_29 extends T_24[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? any : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_34 ? T_34 extends T_33[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_34 ? T_34 extends T_32[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_34 ? T_34 extends T_31[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_34 ? T_34 extends T_29[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_29 : never : never; } : T_24 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_29 ? T_29 extends T_22[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? any : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_35 ? T_35 extends T_34[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_35 ? T_35 extends T_33[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_35 ? T_35 extends T_32[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_35 ? T_35 extends T_31[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_35 ? T_35 extends T_29[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_29 : never : never; } : T_22 : never : never; } : T_15 : never : never : T_14 extends (infer U)[] ? any[] : T_14 extends object ? { [K_2 in keyof T_14]-?: T_14[K_2] extends infer T_22 ? T_22 extends T_14[K_2] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_3 in keyof T_29]-?: any; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_3 in keyof T_28]-?: T_28[K_3] extends infer T_30 ? T_30 extends T_28[K_3] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_31 ? T_31 extends T_30[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_30 : never : never; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: T_27[K_3] extends infer T_30 ? T_30 extends T_27[K_3] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_33 ? T_33 extends T_32[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_32 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_33 ? T_33 extends T_30[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_30 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_30 ? T_30 extends T_26[K_3] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? any : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_34 ? T_34 extends T_33[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_34 ? T_34 extends T_32[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_32 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_34 ? T_34 extends T_30[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_30 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_30 ? T_30 extends T_25[K_3] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? any : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_35 ? T_35 extends T_34[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_35 ? T_35 extends T_33[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_35 ? T_35 extends T_32[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_32 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_35 ? T_35 extends T_30[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_30 : never : never; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_30 ? T_30 extends T_24[K_3] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? any : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_36 ? T_36 extends T_35[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_36 ? T_36 extends T_34[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_36 ? T_36 extends T_33[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_36 ? T_36 extends T_32[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_32 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_36 ? T_36 extends T_30[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_30 : never : never; } : T_24 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_30 ? T_30 extends T_22[K_3] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? any : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_37 ? T_37 extends T_36[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_37 ? T_37 extends T_35[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_37 ? T_37 extends T_34[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_37 ? T_37 extends T_33[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_37 ? T_37 extends T_32[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_32 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_37 ? T_37 extends T_30[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_30 : never : never; } : T_22 : never : never; } : T_14 : never : never : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: T_12[K_2] extends infer T_22 ? T_22 extends T_12[K_2] ? T_22 extends CanBeExpanded ? T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_24 ? T_24 extends T_22[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_24 extends CanBeExpanded ? T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_24[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_23 ? T_23 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_23 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_3 in keyof T_30]-?: any; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_3 in keyof T_29]-?: T_29[K_3] extends infer T_31 ? T_31 extends T_29[K_3] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_3 in keyof T_28]-?: T_28[K_3] extends infer T_31 ? T_31 extends T_28[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? any : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_34 ? T_34 extends T_33[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_34 ? T_34 extends T_31[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_31 : never : never; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: T_27[K_3] extends infer T_31 ? T_31 extends T_27[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? any : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_35 ? T_35 extends T_34[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_35 ? T_35 extends T_33[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_35 ? T_35 extends T_31[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_31 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_31 ? T_31 extends T_26[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? any : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_36 ? T_36 extends T_35[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_36 ? T_36 extends T_34[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_36 ? T_36 extends T_33[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_36 ? T_36 extends T_31[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_31 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_31 ? T_31 extends T_25[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? any : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_37 ? T_37 extends T_36[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_37 ? T_37 extends T_35[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_37 ? T_37 extends T_34[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_37 ? T_37 extends T_33[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_37 ? T_37 extends T_31[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_31 : never : never; } : T_25 : never : never : T_24 extends (infer U)[] ? any[] : T_24 extends object ? { [K_3 in keyof T_24]-?: T_24[K_3] extends infer T_31 ? T_31 extends T_24[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? any : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_38 ? T_38 extends T_37[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_38 ? T_38 extends T_36[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_38 ? T_38 extends T_35[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_38 ? T_38 extends T_34[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_38 ? T_38 extends T_33[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_38 ? T_38 extends T_31[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_31 : never : never; } : T_24 : never : never : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_3 in keyof T_22]-?: T_22[K_3] extends infer T_31 ? T_31 extends T_22[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? T_37[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_38 ? T_38 extends T_37[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_38 extends CanBeExpanded ? any : T_38 extends (infer U)[] ? any[] : T_38 extends object ? { [K_4 in keyof T_38]-?: T_38[K_4] extends infer T_39 ? T_39 extends T_38[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_38 : never : never : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_39 ? T_39 extends T_37[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_39 ? T_39 extends T_36[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_39 ? T_39 extends T_35[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_39 ? T_39 extends T_34[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_39 ? T_39 extends T_33[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_39 ? T_39 extends T_31[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_31 : never : never; } : T_22 : never : never; } : T_12 : never : never; } : T_2 : never : never : T extends (infer U)[] ? any[] : T extends object ? { [K_1 in keyof T]-?: T[K_1] extends infer T_12 ? T_12 extends T[K_1] ? T_12 extends CanBeExpanded ? T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_15 ? T_15 extends T_14[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_15 extends CanBeExpanded ? T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_16 ? T_16 extends T_15[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_16 extends CanBeExpanded ? T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_17 ? T_17 extends T_16[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_17 extends CanBeExpanded ? T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_18 ? T_18 extends T_17[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_18 extends CanBeExpanded ? T_18[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_19 ? T_19 extends T_18[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_19 extends CanBeExpanded ? T_19[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_20 ? T_20 extends T_19[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_20 extends CanBeExpanded ? T_20[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_21 ? T_21 extends T_20[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_21 extends CanBeExpanded ? T_21[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_22 ? T_22 extends T_21[`${string & K_1}` extends infer T_13 ? T_13 extends `${string & K_1}` ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_22 extends CanBeExpanded ? any : T_22 extends (infer U)[] ? any[] : T_22 extends object ? { [K_2 in keyof T_22]-?: any; } : T_22 : never : never : T_21 extends (infer U)[] ? any[] : T_21 extends object ? { [K_2 in keyof T_21]-?: T_21[K_2] extends infer T_23 ? T_23 extends T_21[K_2] ? T_23 extends CanBeExpanded ? any : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: any; } : T_23 : never : never; } : T_21 : never : never : T_20 extends (infer U)[] ? any[] : T_20 extends object ? { [K_2 in keyof T_20]-?: T_20[K_2] extends infer T_23 ? T_23 extends T_20[K_2] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? any : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: any; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_26 ? T_26 extends T_23[K_3] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_4 in keyof T_26]-?: T_26[K_4] extends infer T_27 ? T_27 extends T_26[K_4] ? T_27 extends CanBeExpanded ? T_27["default"] : T_27 : never : never; } : T_26 : never : never; } : T_23 : never : never; } : T_20 : never : never : T_19 extends (infer U)[] ? any[] : T_19 extends object ? { [K_2 in keyof T_19]-?: T_19[K_2] extends infer T_23 ? T_23 extends T_19[K_2] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? any : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: any; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_27 ? T_27 extends T_25[K_3] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_28 ? T_28 extends T_27[K_4] ? T_28 extends CanBeExpanded ? T_28["default"] : T_28 : never : never; } : T_27 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_27 ? T_27 extends T_23[K_3] ? T_27 extends CanBeExpanded ? T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_27[PrefixWith, K_3, "."> extends infer T_28 ? T_28 extends PrefixWith, K_3, "."> ? T_28 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_4 in keyof T_27]-?: T_27[K_4] extends infer T_30 ? T_30 extends T_27[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_27 : never : never; } : T_23 : never : never; } : T_19 : never : never : T_18 extends (infer U)[] ? any[] : T_18 extends object ? { [K_2 in keyof T_18]-?: T_18[K_2] extends infer T_23 ? T_23 extends T_18[K_2] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? any : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: any; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_28 ? T_28 extends T_26[K_3] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_29 ? T_29 extends T_28[K_4] ? T_29 extends CanBeExpanded ? T_29["default"] : T_29 : never : never; } : T_28 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_28 ? T_28 extends T_25[K_3] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_31 ? T_31 extends T_30[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_30 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_31 ? T_31 extends T_28[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_28 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_28 ? T_28 extends T_23[K_3] ? T_28 extends CanBeExpanded ? T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_28[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith, K_3, "."> extends infer T_29 ? T_29 extends PrefixWith, K_3, "."> ? T_29 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_32 ? T_32 extends T_30[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_30 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_4 in keyof T_28]-?: T_28[K_4] extends infer T_32 ? T_32 extends T_28[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_28 : never : never; } : T_23 : never : never; } : T_18 : never : never : T_17 extends (infer U)[] ? any[] : T_17 extends object ? { [K_2 in keyof T_17]-?: T_17[K_2] extends infer T_23 ? T_23 extends T_17[K_2] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? any : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_3 in keyof T_28]-?: any; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: T_27[K_3] extends infer T_29 ? T_29 extends T_27[K_3] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_30 ? T_30 extends T_29[K_4] ? T_30 extends CanBeExpanded ? T_30["default"] : T_30 : never : never; } : T_29 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_29 ? T_29 extends T_26[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_32 ? T_32 extends T_29[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_29 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_29 ? T_29 extends T_25[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_33 ? T_33 extends T_32[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_33 ? T_33 extends T_31[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_33 ? T_33 extends T_29[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_29 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_29 ? T_29 extends T_23[K_3] ? T_29 extends CanBeExpanded ? T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_29[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_30 ? T_30 extends PrefixWith, K_3, "."> ? T_30 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? any : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_34 ? T_34 extends T_33[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_34 ? T_34 extends T_32[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_34 ? T_34 extends T_31[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_31 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_4 in keyof T_29]-?: T_29[K_4] extends infer T_34 ? T_34 extends T_29[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_29 : never : never; } : T_23 : never : never; } : T_17 : never : never : T_16 extends (infer U)[] ? any[] : T_16 extends object ? { [K_2 in keyof T_16]-?: T_16[K_2] extends infer T_23 ? T_23 extends T_16[K_2] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? any : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_3 in keyof T_29]-?: any; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_3 in keyof T_28]-?: T_28[K_3] extends infer T_30 ? T_30 extends T_28[K_3] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_31 ? T_31 extends T_30[K_4] ? T_31 extends CanBeExpanded ? T_31["default"] : T_31 : never : never; } : T_30 : never : never; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: T_27[K_3] extends infer T_30 ? T_30 extends T_27[K_3] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_33 ? T_33 extends T_32[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_32 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_33 ? T_33 extends T_30[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_30 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_30 ? T_30 extends T_26[K_3] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? any : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_34 ? T_34 extends T_33[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_34 ? T_34 extends T_32[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_32 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_34 ? T_34 extends T_30[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_30 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_30 ? T_30 extends T_25[K_3] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? any : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_35 ? T_35 extends T_34[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_35 ? T_35 extends T_33[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_35 ? T_35 extends T_32[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_32 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_35 ? T_35 extends T_30[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_30 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_30 ? T_30 extends T_23[K_3] ? T_30 extends CanBeExpanded ? T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_30[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_32[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_31 ? T_31 extends PrefixWith, K_3, "."> ? T_31 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? any : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_36 ? T_36 extends T_35[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_36 ? T_36 extends T_34[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_36 ? T_36 extends T_33[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_33 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_36 ? T_36 extends T_32[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_32 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_4 in keyof T_30]-?: T_30[K_4] extends infer T_36 ? T_36 extends T_30[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_30 : never : never; } : T_23 : never : never; } : T_16 : never : never : T_15 extends (infer U)[] ? any[] : T_15 extends object ? { [K_2 in keyof T_15]-?: T_15[K_2] extends infer T_23 ? T_23 extends T_15[K_2] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? any : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_3 in keyof T_30]-?: any; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_3 in keyof T_29]-?: T_29[K_3] extends infer T_31 ? T_31 extends T_29[K_3] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_32 ? T_32 extends T_31[K_4] ? T_32 extends CanBeExpanded ? T_32["default"] : T_32 : never : never; } : T_31 : never : never; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_3 in keyof T_28]-?: T_28[K_3] extends infer T_31 ? T_31 extends T_28[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? any : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_34 ? T_34 extends T_33[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_34 ? T_34 extends T_31[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_31 : never : never; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: T_27[K_3] extends infer T_31 ? T_31 extends T_27[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? any : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_35 ? T_35 extends T_34[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_35 ? T_35 extends T_33[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_35 ? T_35 extends T_31[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_31 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_31 ? T_31 extends T_26[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? any : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_36 ? T_36 extends T_35[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_36 ? T_36 extends T_34[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_36 ? T_36 extends T_33[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_36 ? T_36 extends T_31[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_31 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_31 ? T_31 extends T_25[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? any : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_37 ? T_37 extends T_36[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_37 ? T_37 extends T_35[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_37 ? T_37 extends T_34[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_37 ? T_37 extends T_33[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_37 ? T_37 extends T_31[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_31 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_31 ? T_31 extends T_23[K_3] ? T_31 extends CanBeExpanded ? T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_33 ? T_33 extends T_31[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_33[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_32 ? T_32 extends PrefixWith, K_3, "."> ? T_32 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? any : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_38 ? T_38 extends T_37[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_38 ? T_38 extends T_36[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_38 ? T_38 extends T_35[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_38 ? T_38 extends T_34[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_34 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_38 ? T_38 extends T_33[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_33 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_4 in keyof T_31]-?: T_31[K_4] extends infer T_38 ? T_38 extends T_31[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_31 : never : never; } : T_23 : never : never; } : T_15 : never : never : T_14 extends (infer U)[] ? any[] : T_14 extends object ? { [K_2 in keyof T_14]-?: T_14[K_2] extends infer T_23 ? T_23 extends T_14[K_2] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? any : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_3 in keyof T_31]-?: any; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_3 in keyof T_30]-?: T_30[K_3] extends infer T_32 ? T_32 extends T_30[K_3] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_33 ? T_33 extends T_32[K_4] ? T_33 extends CanBeExpanded ? T_33["default"] : T_33 : never : never; } : T_32 : never : never; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_3 in keyof T_29]-?: T_29[K_3] extends infer T_32 ? T_32 extends T_29[K_3] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? any : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_35 ? T_35 extends T_34[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_34 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_35 ? T_35 extends T_32[K_4] ? T_35 extends CanBeExpanded ? T_35["default"] : T_35 : never : never; } : T_32 : never : never; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_3 in keyof T_28]-?: T_28[K_3] extends infer T_32 ? T_32 extends T_28[K_3] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? any : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_36 ? T_36 extends T_35[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_36 ? T_36 extends T_34[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_34 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_36 ? T_36 extends T_32[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_32 : never : never; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: T_27[K_3] extends infer T_32 ? T_32 extends T_27[K_3] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? any : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_37 ? T_37 extends T_36[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_37 ? T_37 extends T_35[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_37 ? T_37 extends T_34[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_34 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_37 ? T_37 extends T_32[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_32 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_32 ? T_32 extends T_26[K_3] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? any : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_38 ? T_38 extends T_37[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_38 ? T_38 extends T_36[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_38 ? T_38 extends T_35[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_38 ? T_38 extends T_34[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_34 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_38 ? T_38 extends T_32[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_32 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_32 ? T_32 extends T_25[K_3] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? T_37[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_38 ? T_38 extends T_37[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_38 extends CanBeExpanded ? any : T_38 extends (infer U)[] ? any[] : T_38 extends object ? { [K_4 in keyof T_38]-?: T_38[K_4] extends infer T_39 ? T_39 extends T_38[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_38 : never : never : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_39 ? T_39 extends T_37[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_39 ? T_39 extends T_36[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_39 ? T_39 extends T_35[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_39 ? T_39 extends T_34[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_34 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_39 ? T_39 extends T_32[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_32 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_32 ? T_32 extends T_23[K_3] ? T_32 extends CanBeExpanded ? T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_34 ? T_34 extends T_32[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_34 extends CanBeExpanded ? T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_34[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? T_37[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_38 ? T_38 extends T_37[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_38 extends CanBeExpanded ? T_38[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] extends infer T_39 ? T_39 extends T_38[PrefixWith, K_3, "."> extends infer T_33 ? T_33 extends PrefixWith, K_3, "."> ? T_33 extends SplitAC ? "value" : "default" : never : never] ? T_39 extends CanBeExpanded ? any : T_39 extends (infer U)[] ? any[] : T_39 extends object ? { [K_4 in keyof T_39]-?: T_39[K_4] extends infer T_40 ? T_40 extends T_39[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_39 : never : never : T_38 extends (infer U)[] ? any[] : T_38 extends object ? { [K_4 in keyof T_38]-?: T_38[K_4] extends infer T_40 ? T_40 extends T_38[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_38 : never : never : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_40 ? T_40 extends T_37[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_40 ? T_40 extends T_36[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_40 ? T_40 extends T_35[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_35 : never : never : T_34 extends (infer U)[] ? any[] : T_34 extends object ? { [K_4 in keyof T_34]-?: T_34[K_4] extends infer T_40 ? T_40 extends T_34[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_34 : never : never : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_4 in keyof T_32]-?: T_32[K_4] extends infer T_40 ? T_40 extends T_32[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_32 : never : never; } : T_23 : never : never; } : T_14 : never : never : T_12 extends (infer U)[] ? any[] : T_12 extends object ? { [K_2 in keyof T_12]-?: T_12[K_2] extends infer T_23 ? T_23 extends T_12[K_2] ? T_23 extends CanBeExpanded ? T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_25 ? T_25 extends T_23[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_25 extends CanBeExpanded ? T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_26 ? T_26 extends T_25[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_26 extends CanBeExpanded ? T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_27 ? T_27 extends T_26[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_27 extends CanBeExpanded ? T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_28 ? T_28 extends T_27[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_28 extends CanBeExpanded ? T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_29 ? T_29 extends T_28[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_29 extends CanBeExpanded ? T_29[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_30 ? T_30 extends T_29[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_30 extends CanBeExpanded ? T_30[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_31 ? T_31 extends T_30[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_31 extends CanBeExpanded ? T_31[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] extends infer T_32 ? T_32 extends T_31[PrefixWith<`${string & K_1}`, K_2, "."> extends infer T_24 ? T_24 extends PrefixWith<`${string & K_1}`, K_2, "."> ? T_24 extends SplitAC ? "value" : "default" : never : never] ? T_32 extends CanBeExpanded ? any : T_32 extends (infer U)[] ? any[] : T_32 extends object ? { [K_3 in keyof T_32]-?: any; } : T_32 : never : never : T_31 extends (infer U)[] ? any[] : T_31 extends object ? { [K_3 in keyof T_31]-?: T_31[K_3] extends infer T_33 ? T_33 extends T_31[K_3] ? T_33 extends CanBeExpanded ? any : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_34 ? T_34 extends T_33[K_4] ? T_34 extends CanBeExpanded ? T_34["default"] : T_34 : never : never; } : T_33 : never : never; } : T_31 : never : never : T_30 extends (infer U)[] ? any[] : T_30 extends object ? { [K_3 in keyof T_30]-?: T_30[K_3] extends infer T_33 ? T_33 extends T_30[K_3] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? any : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_36 ? T_36 extends T_35[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_35 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_36 ? T_36 extends T_33[K_4] ? T_36 extends CanBeExpanded ? T_36["default"] : T_36 : never : never; } : T_33 : never : never; } : T_30 : never : never : T_29 extends (infer U)[] ? any[] : T_29 extends object ? { [K_3 in keyof T_29]-?: T_29[K_3] extends infer T_33 ? T_33 extends T_29[K_3] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? any : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_37 ? T_37 extends T_36[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_37 ? T_37 extends T_35[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_35 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_37 ? T_37 extends T_33[K_4] ? T_37 extends CanBeExpanded ? T_37["default"] : T_37 : never : never; } : T_33 : never : never; } : T_29 : never : never : T_28 extends (infer U)[] ? any[] : T_28 extends object ? { [K_3 in keyof T_28]-?: T_28[K_3] extends infer T_33 ? T_33 extends T_28[K_3] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? any : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_38 ? T_38 extends T_37[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_38 ? T_38 extends T_36[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_38 ? T_38 extends T_35[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_35 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_38 ? T_38 extends T_33[K_4] ? T_38 extends CanBeExpanded ? T_38["default"] : T_38 : never : never; } : T_33 : never : never; } : T_28 : never : never : T_27 extends (infer U)[] ? any[] : T_27 extends object ? { [K_3 in keyof T_27]-?: T_27[K_3] extends infer T_33 ? T_33 extends T_27[K_3] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? T_37[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_38 ? T_38 extends T_37[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_38 extends CanBeExpanded ? any : T_38 extends (infer U)[] ? any[] : T_38 extends object ? { [K_4 in keyof T_38]-?: T_38[K_4] extends infer T_39 ? T_39 extends T_38[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_38 : never : never : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_39 ? T_39 extends T_37[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_39 ? T_39 extends T_36[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_39 ? T_39 extends T_35[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_35 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_39 ? T_39 extends T_33[K_4] ? T_39 extends CanBeExpanded ? T_39["default"] : T_39 : never : never; } : T_33 : never : never; } : T_27 : never : never : T_26 extends (infer U)[] ? any[] : T_26 extends object ? { [K_3 in keyof T_26]-?: T_26[K_3] extends infer T_33 ? T_33 extends T_26[K_3] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? T_37[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_38 ? T_38 extends T_37[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_38 extends CanBeExpanded ? T_38[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_39 ? T_39 extends T_38[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_39 extends CanBeExpanded ? any : T_39 extends (infer U)[] ? any[] : T_39 extends object ? { [K_4 in keyof T_39]-?: T_39[K_4] extends infer T_40 ? T_40 extends T_39[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_39 : never : never : T_38 extends (infer U)[] ? any[] : T_38 extends object ? { [K_4 in keyof T_38]-?: T_38[K_4] extends infer T_40 ? T_40 extends T_38[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_38 : never : never : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_40 ? T_40 extends T_37[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_40 ? T_40 extends T_36[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_40 ? T_40 extends T_35[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_35 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_40 ? T_40 extends T_33[K_4] ? T_40 extends CanBeExpanded ? T_40["default"] : T_40 : never : never; } : T_33 : never : never; } : T_26 : never : never : T_25 extends (infer U)[] ? any[] : T_25 extends object ? { [K_3 in keyof T_25]-?: T_25[K_3] extends infer T_33 ? T_33 extends T_25[K_3] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? T_37[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_38 ? T_38 extends T_37[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_38 extends CanBeExpanded ? T_38[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_39 ? T_39 extends T_38[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_39 extends CanBeExpanded ? T_39[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_40 ? T_40 extends T_39[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_40 extends CanBeExpanded ? any : T_40 extends (infer U)[] ? any[] : T_40 extends object ? { [K_4 in keyof T_40]-?: T_40[K_4] extends infer T_41 ? T_41 extends T_40[K_4] ? T_41 extends CanBeExpanded ? T_41["default"] : T_41 : never : never; } : T_40 : never : never : T_39 extends (infer U)[] ? any[] : T_39 extends object ? { [K_4 in keyof T_39]-?: T_39[K_4] extends infer T_41 ? T_41 extends T_39[K_4] ? T_41 extends CanBeExpanded ? T_41["default"] : T_41 : never : never; } : T_39 : never : never : T_38 extends (infer U)[] ? any[] : T_38 extends object ? { [K_4 in keyof T_38]-?: T_38[K_4] extends infer T_41 ? T_41 extends T_38[K_4] ? T_41 extends CanBeExpanded ? T_41["default"] : T_41 : never : never; } : T_38 : never : never : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_41 ? T_41 extends T_37[K_4] ? T_41 extends CanBeExpanded ? T_41["default"] : T_41 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_41 ? T_41 extends T_36[K_4] ? T_41 extends CanBeExpanded ? T_41["default"] : T_41 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_41 ? T_41 extends T_35[K_4] ? T_41 extends CanBeExpanded ? T_41["default"] : T_41 : never : never; } : T_35 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_41 ? T_41 extends T_33[K_4] ? T_41 extends CanBeExpanded ? T_41["default"] : T_41 : never : never; } : T_33 : never : never; } : T_25 : never : never : T_23 extends (infer U)[] ? any[] : T_23 extends object ? { [K_3 in keyof T_23]-?: T_23[K_3] extends infer T_33 ? T_33 extends T_23[K_3] ? T_33 extends CanBeExpanded ? T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_35 ? T_35 extends T_33[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_35 extends CanBeExpanded ? T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_36 ? T_36 extends T_35[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_36 extends CanBeExpanded ? T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_37 ? T_37 extends T_36[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_37 extends CanBeExpanded ? T_37[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_38 ? T_38 extends T_37[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_38 extends CanBeExpanded ? T_38[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_39 ? T_39 extends T_38[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_39 extends CanBeExpanded ? T_39[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_40 ? T_40 extends T_39[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_40 extends CanBeExpanded ? T_40[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] extends infer T_41 ? T_41 extends T_40[PrefixWith, K_3, "."> extends infer T_34 ? T_34 extends PrefixWith, K_3, "."> ? T_34 extends SplitAC ? "value" : "default" : never : never] ? T_41 extends CanBeExpanded ? any : T_41 extends (infer U)[] ? any[] : T_41 extends object ? { [K_4 in keyof T_41]-?: T_41[K_4] extends infer T_42 ? T_42 extends T_41[K_4] ? T_42 extends CanBeExpanded ? T_42["default"] : T_42 : never : never; } : T_41 : never : never : T_40 extends (infer U)[] ? any[] : T_40 extends object ? { [K_4 in keyof T_40]-?: T_40[K_4] extends infer T_42 ? T_42 extends T_40[K_4] ? T_42 extends CanBeExpanded ? T_42["default"] : T_42 : never : never; } : T_40 : never : never : T_39 extends (infer U)[] ? any[] : T_39 extends object ? { [K_4 in keyof T_39]-?: T_39[K_4] extends infer T_42 ? T_42 extends T_39[K_4] ? T_42 extends CanBeExpanded ? T_42["default"] : T_42 : never : never; } : T_39 : never : never : T_38 extends (infer U)[] ? any[] : T_38 extends object ? { [K_4 in keyof T_38]-?: T_38[K_4] extends infer T_42 ? T_42 extends T_38[K_4] ? T_42 extends CanBeExpanded ? T_42["default"] : T_42 : never : never; } : T_38 : never : never : T_37 extends (infer U)[] ? any[] : T_37 extends object ? { [K_4 in keyof T_37]-?: T_37[K_4] extends infer T_42 ? T_42 extends T_37[K_4] ? T_42 extends CanBeExpanded ? T_42["default"] : T_42 : never : never; } : T_37 : never : never : T_36 extends (infer U)[] ? any[] : T_36 extends object ? { [K_4 in keyof T_36]-?: T_36[K_4] extends infer T_42 ? T_42 extends T_36[K_4] ? T_42 extends CanBeExpanded ? T_42["default"] : T_42 : never : never; } : T_36 : never : never : T_35 extends (infer U)[] ? any[] : T_35 extends object ? { [K_4 in keyof T_35]-?: T_35[K_4] extends infer T_42 ? T_42 extends T_35[K_4] ? T_42 extends CanBeExpanded ? T_42["default"] : T_42 : never : never; } : T_35 : never : never : T_33 extends (infer U)[] ? any[] : T_33 extends object ? { [K_4 in keyof T_33]-?: T_33[K_4] extends infer T_42 ? T_42 extends T_33[K_4] ? T_42 extends CanBeExpanded ? T_42["default"] : T_42 : never : never; } : T_33 : never : never; } : T_23 : never : never; } : T_12 : never : never; } : T +>UseQueryOptions2 : T extends CanBeExpanded ? T["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_2 ? T_2 extends T["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_2 extends CanBeExpanded ? T_2["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_3 ? T_3 extends T_2["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_3 extends CanBeExpanded ? T_3["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_4 ? T_4 extends T_3["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_4 extends CanBeExpanded ? T_4["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_5 ? T_5 extends T_4["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_5 extends CanBeExpanded ? T_5["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_6 ? T_6 extends T_5["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_6 extends CanBeExpanded ? T_6["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_7 ? T_7 extends T_6["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_7 extends CanBeExpanded ? T_7["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_8 ? T_8 extends T_7["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_8 extends CanBeExpanded ? T_8["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_9 ? T_9 extends T_8["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_9 extends CanBeExpanded ? T_9["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_10 ? T_10 extends T_9["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_10 extends CanBeExpanded ? T_10["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_11 ? T_11 extends T_10["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_11 extends CanBeExpanded ? any : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any type UseQueryOptions3 = Expand_ extends infer O ? O : never >UseQueryOptions3 : UseQueryOptions3 diff --git a/tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.errors.txt b/tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.errors.txt new file mode 100644 index 0000000000000..81605ddb9515d --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.errors.txt @@ -0,0 +1,44 @@ +local.ts(1,17): error TS5088: The inferred type of 'array' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +local.ts(5,17): error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +local.ts(9,17): error TS5088: The inferred type of 'readonlyTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +local.ts(13,17): error TS5088: The inferred type of 'union' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + + +==== local.ts (4 errors) ==== + export function array() { + ~~~~~ +!!! error TS5088: The inferred type of 'array' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + type Recursive = Recursive[]; + return null as unknown as Recursive; + } + export function tuple() { + ~~~~~ +!!! error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + type Recursive = [Recursive]; + return null as unknown as Recursive; + } + export function readonlyTuple() { + ~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'readonlyTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + type Recursive = readonly [Recursive]; + return null as unknown as Recursive; + } + export function union() { + ~~~~~ +!!! error TS5088: The inferred type of 'union' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + type Recursive = string | Recursive[]; + return null as unknown as Recursive; + } + +==== nameable.ts (0 errors) ==== + export type RecursiveArray = RecursiveArray[]; + export type RecursiveTuple = readonly [RecursiveTuple]; + declare const array: RecursiveArray; + declare const tuple: RecursiveTuple; + export const namedArray = array; + export const namedTuple = tuple; + export function finite() { + type Nested = [[[[[[[[[[[[[number]]]]]]]]]]]]]; + return null as unknown as Nested; + } + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.js b/tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.js new file mode 100644 index 0000000000000..8686ed33ff4f6 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.js @@ -0,0 +1,60 @@ +//// [tests/cases/compiler/recursiveContainerDeclarationSerialization.ts] //// + +//// [local.ts] +export function array() { + type Recursive = Recursive[]; + return null as unknown as Recursive; +} +export function tuple() { + type Recursive = [Recursive]; + return null as unknown as Recursive; +} +export function readonlyTuple() { + type Recursive = readonly [Recursive]; + return null as unknown as Recursive; +} +export function union() { + type Recursive = string | Recursive[]; + return null as unknown as Recursive; +} + +//// [nameable.ts] +export type RecursiveArray = RecursiveArray[]; +export type RecursiveTuple = readonly [RecursiveTuple]; +declare const array: RecursiveArray; +declare const tuple: RecursiveTuple; +export const namedArray = array; +export const namedTuple = tuple; +export function finite() { + type Nested = [[[[[[[[[[[[[number]]]]]]]]]]]]]; + return null as unknown as Nested; +} + + +//// [local.js] +export function array() { + return null; +} +export function tuple() { + return null; +} +export function readonlyTuple() { + return null; +} +export function union() { + return null; +} +//// [nameable.js] +export const namedArray = array; +export const namedTuple = tuple; +export function finite() { + return null; +} + + +//// [nameable.d.ts] +export type RecursiveArray = RecursiveArray[]; +export type RecursiveTuple = readonly [RecursiveTuple]; +export declare const namedArray: RecursiveArray; +export declare const namedTuple: RecursiveTuple; +export declare function finite(): [[[[[[[[[[[[[number]]]]]]]]]]]]]; diff --git a/tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.symbols b/tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.symbols new file mode 100644 index 0000000000000..246fdbd9b976e --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.symbols @@ -0,0 +1,79 @@ +//// [tests/cases/compiler/recursiveContainerDeclarationSerialization.ts] //// + +=== local.ts === +export function array() { +>array : Symbol(array, Decl(local.ts, 0, 0)) + + type Recursive = Recursive[]; +>Recursive : Symbol(Recursive, Decl(local.ts, 0, 25)) +>Recursive : Symbol(Recursive, Decl(local.ts, 0, 25)) + + return null as unknown as Recursive; +>Recursive : Symbol(Recursive, Decl(local.ts, 0, 25)) +} +export function tuple() { +>tuple : Symbol(tuple, Decl(local.ts, 3, 1)) + + type Recursive = [Recursive]; +>Recursive : Symbol(Recursive, Decl(local.ts, 4, 25)) +>Recursive : Symbol(Recursive, Decl(local.ts, 4, 25)) + + return null as unknown as Recursive; +>Recursive : Symbol(Recursive, Decl(local.ts, 4, 25)) +} +export function readonlyTuple() { +>readonlyTuple : Symbol(readonlyTuple, Decl(local.ts, 7, 1)) + + type Recursive = readonly [Recursive]; +>Recursive : Symbol(Recursive, Decl(local.ts, 8, 33)) +>Recursive : Symbol(Recursive, Decl(local.ts, 8, 33)) + + return null as unknown as Recursive; +>Recursive : Symbol(Recursive, Decl(local.ts, 8, 33)) +} +export function union() { +>union : Symbol(union, Decl(local.ts, 11, 1)) + + type Recursive = string | Recursive[]; +>Recursive : Symbol(Recursive, Decl(local.ts, 12, 25)) +>Recursive : Symbol(Recursive, Decl(local.ts, 12, 25)) + + return null as unknown as Recursive; +>Recursive : Symbol(Recursive, Decl(local.ts, 12, 25)) +} + +=== nameable.ts === +export type RecursiveArray = RecursiveArray[]; +>RecursiveArray : Symbol(RecursiveArray, Decl(nameable.ts, 0, 0)) +>RecursiveArray : Symbol(RecursiveArray, Decl(nameable.ts, 0, 0)) + +export type RecursiveTuple = readonly [RecursiveTuple]; +>RecursiveTuple : Symbol(RecursiveTuple, Decl(nameable.ts, 0, 46)) +>RecursiveTuple : Symbol(RecursiveTuple, Decl(nameable.ts, 0, 46)) + +declare const array: RecursiveArray; +>array : Symbol(array, Decl(nameable.ts, 2, 13)) +>RecursiveArray : Symbol(RecursiveArray, Decl(nameable.ts, 0, 0)) + +declare const tuple: RecursiveTuple; +>tuple : Symbol(tuple, Decl(nameable.ts, 3, 13)) +>RecursiveTuple : Symbol(RecursiveTuple, Decl(nameable.ts, 0, 46)) + +export const namedArray = array; +>namedArray : Symbol(namedArray, Decl(nameable.ts, 4, 12)) +>array : Symbol(array, Decl(nameable.ts, 2, 13)) + +export const namedTuple = tuple; +>namedTuple : Symbol(namedTuple, Decl(nameable.ts, 5, 12)) +>tuple : Symbol(tuple, Decl(nameable.ts, 3, 13)) + +export function finite() { +>finite : Symbol(finite, Decl(nameable.ts, 5, 32)) + + type Nested = [[[[[[[[[[[[[number]]]]]]]]]]]]]; +>Nested : Symbol(Nested, Decl(nameable.ts, 6, 26)) + + return null as unknown as Nested; +>Nested : Symbol(Nested, Decl(nameable.ts, 6, 26)) +} + diff --git a/tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.types b/tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.types new file mode 100644 index 0000000000000..ff4f830936e6d --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.types @@ -0,0 +1,76 @@ +//// [tests/cases/compiler/recursiveContainerDeclarationSerialization.ts] //// + +=== local.ts === +export function array() { +>array : () => any[] + + type Recursive = Recursive[]; +>Recursive : any[] + + return null as unknown as Recursive; +>null as unknown as Recursive : any[] +>null as unknown : unknown +} +export function tuple() { +>tuple : () => [any] + + type Recursive = [Recursive]; +>Recursive : [any] + + return null as unknown as Recursive; +>null as unknown as Recursive : [any] +>null as unknown : unknown +} +export function readonlyTuple() { +>readonlyTuple : () => readonly [any] + + type Recursive = readonly [Recursive]; +>Recursive : readonly [any] + + return null as unknown as Recursive; +>null as unknown as Recursive : readonly [any] +>null as unknown : unknown +} +export function union() { +>union : () => string | (string | any)[] + + type Recursive = string | Recursive[]; +>Recursive : string | (string | any)[] + + return null as unknown as Recursive; +>null as unknown as Recursive : string | (string | any)[] +>null as unknown : unknown +} + +=== nameable.ts === +export type RecursiveArray = RecursiveArray[]; +>RecursiveArray : RecursiveArray + +export type RecursiveTuple = readonly [RecursiveTuple]; +>RecursiveTuple : RecursiveTuple + +declare const array: RecursiveArray; +>array : RecursiveArray + +declare const tuple: RecursiveTuple; +>tuple : RecursiveTuple + +export const namedArray = array; +>namedArray : RecursiveArray +>array : RecursiveArray + +export const namedTuple = tuple; +>namedTuple : RecursiveTuple +>tuple : RecursiveTuple + +export function finite() { +>finite : () => [[[[[[[[[[[[[number]]]]]]]]]]]]] + + type Nested = [[[[[[[[[[[[[number]]]]]]]]]]]]]; +>Nested : [[[[[[[[[[[[[number]]]]]]]]]]]]] + + return null as unknown as Nested; +>null as unknown as Nested : [[[[[[[[[[[[[number]]]]]]]]]]]]] +>null as unknown : unknown +} + diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt new file mode 100644 index 0000000000000..5a0afbaf33fae --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt @@ -0,0 +1,38 @@ +consumer.ts(10,7): error TS2322: Type '() => typeof arrow' is not assignable to type 'number'. + + +==== script.ts (0 errors) ==== + const scriptArrow = () => scriptArrow; + const scriptExpression = function () { return scriptExpression; }; + function scriptDeclaration() { return scriptDeclaration; } + +==== exported.ts (0 errors) ==== + export const arrow = () => arrow; + export const expression = function () { return expression; }; + export function declaration() { return declaration; } + export const annotated: () => typeof annotated = () => annotated; + export const first = () => second; + export const second = () => first; + export const generic = (value: T) => generic; + export const finite = () => () => 1; + export const wrapped = { arrow }; + export const tuple = [arrow] as const; + export const named = function self() { return self; }; + export const broad: unknown = function self() { return self; }; + export const contextual: () => unknown = function self() { return self; }; + export const specialized = generic; + +==== consumer.ts (1 errors) ==== + import { arrow, expression, declaration, first, generic, finite, wrapped, tuple } from "./exported"; + const a: typeof arrow = arrow()()(); + const b: typeof expression = expression()()(); + const c: typeof declaration = declaration()()(); + const d: typeof first = first()()(); + const e: typeof generic = generic(1)("text")(true); + const f: number = finite()(); + const g: typeof arrow = wrapped.arrow()(); + const h: typeof arrow = tuple[0]()(); + const invalid: number = arrow()()(); + ~~~~~~~ +!!! error TS2322: Type '() => typeof arrow' is not assignable to type 'number'. + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js new file mode 100644 index 0000000000000..749a33967c1a2 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js @@ -0,0 +1,92 @@ +//// [tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts] //// + +//// [script.ts] +const scriptArrow = () => scriptArrow; +const scriptExpression = function () { return scriptExpression; }; +function scriptDeclaration() { return scriptDeclaration; } + +//// [exported.ts] +export const arrow = () => arrow; +export const expression = function () { return expression; }; +export function declaration() { return declaration; } +export const annotated: () => typeof annotated = () => annotated; +export const first = () => second; +export const second = () => first; +export const generic = (value: T) => generic; +export const finite = () => () => 1; +export const wrapped = { arrow }; +export const tuple = [arrow] as const; +export const named = function self() { return self; }; +export const broad: unknown = function self() { return self; }; +export const contextual: () => unknown = function self() { return self; }; +export const specialized = generic; + +//// [consumer.ts] +import { arrow, expression, declaration, first, generic, finite, wrapped, tuple } from "./exported"; +const a: typeof arrow = arrow()()(); +const b: typeof expression = expression()()(); +const c: typeof declaration = declaration()()(); +const d: typeof first = first()()(); +const e: typeof generic = generic(1)("text")(true); +const f: number = finite()(); +const g: typeof arrow = wrapped.arrow()(); +const h: typeof arrow = tuple[0]()(); +const invalid: number = arrow()()(); + + +//// [script.js] +"use strict"; +const scriptArrow = () => scriptArrow; +const scriptExpression = function () { return scriptExpression; }; +function scriptDeclaration() { return scriptDeclaration; } +//// [exported.js] +export const arrow = () => arrow; +export const expression = function () { return expression; }; +export function declaration() { return declaration; } +export const annotated = () => annotated; +export const first = () => second; +export const second = () => first; +export const generic = (value) => generic; +export const finite = () => () => 1; +export const wrapped = { arrow }; +export const tuple = [arrow]; +export const named = function self() { return self; }; +export const broad = function self() { return self; }; +export const contextual = function self() { return self; }; +export const specialized = generic; +//// [consumer.js] +import { arrow, expression, declaration, first, generic, finite, wrapped, tuple } from "./exported"; +const a = arrow()()(); +const b = expression()()(); +const c = declaration()()(); +const d = first()()(); +const e = generic(1)("text")(true); +const f = finite()(); +const g = wrapped.arrow()(); +const h = tuple[0]()(); +const invalid = arrow()()(); + + +//// [script.d.ts] +declare const scriptArrow: () => typeof scriptArrow; +declare const scriptExpression: () => typeof scriptExpression; +declare function scriptDeclaration(): typeof scriptDeclaration; +//// [exported.d.ts] +export declare const arrow: () => typeof arrow; +export declare const expression: () => typeof expression; +export declare function declaration(): typeof declaration; +export declare const annotated: () => typeof annotated; +export declare const first: () => typeof second; +export declare const second: () => typeof first; +export declare const generic: (value: T) => typeof generic; +export declare const finite: () => () => number; +export declare const wrapped: { + arrow: typeof arrow; +}; +export declare const tuple: readonly [typeof arrow]; +export declare const named: () => typeof named; +export declare const broad: unknown; +export declare const contextual: () => unknown; +export declare const specialized: (value: number) => typeof generic; +//// [consumer.d.ts] +export {}; diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.symbols b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.symbols new file mode 100644 index 0000000000000..e582c3c685f2b --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.symbols @@ -0,0 +1,136 @@ +//// [tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts] //// + +=== script.ts === +const scriptArrow = () => scriptArrow; +>scriptArrow : Symbol(scriptArrow, Decl(script.ts, 0, 5)) +>scriptArrow : Symbol(scriptArrow, Decl(script.ts, 0, 5)) + +const scriptExpression = function () { return scriptExpression; }; +>scriptExpression : Symbol(scriptExpression, Decl(script.ts, 1, 5)) +>scriptExpression : Symbol(scriptExpression, Decl(script.ts, 1, 5)) + +function scriptDeclaration() { return scriptDeclaration; } +>scriptDeclaration : Symbol(scriptDeclaration, Decl(script.ts, 1, 66)) +>scriptDeclaration : Symbol(scriptDeclaration, Decl(script.ts, 1, 66)) + +=== exported.ts === +export const arrow = () => arrow; +>arrow : Symbol(arrow, Decl(exported.ts, 0, 12)) +>arrow : Symbol(arrow, Decl(exported.ts, 0, 12)) + +export const expression = function () { return expression; }; +>expression : Symbol(expression, Decl(exported.ts, 1, 12)) +>expression : Symbol(expression, Decl(exported.ts, 1, 12)) + +export function declaration() { return declaration; } +>declaration : Symbol(declaration, Decl(exported.ts, 1, 61)) +>declaration : Symbol(declaration, Decl(exported.ts, 1, 61)) + +export const annotated: () => typeof annotated = () => annotated; +>annotated : Symbol(annotated, Decl(exported.ts, 3, 12)) +>annotated : Symbol(annotated, Decl(exported.ts, 3, 12)) +>annotated : Symbol(annotated, Decl(exported.ts, 3, 12)) + +export const first = () => second; +>first : Symbol(first, Decl(exported.ts, 4, 12)) +>second : Symbol(second, Decl(exported.ts, 5, 12)) + +export const second = () => first; +>second : Symbol(second, Decl(exported.ts, 5, 12)) +>first : Symbol(first, Decl(exported.ts, 4, 12)) + +export const generic = (value: T) => generic; +>generic : Symbol(generic, Decl(exported.ts, 6, 12)) +>T : Symbol(T, Decl(exported.ts, 6, 24)) +>value : Symbol(value, Decl(exported.ts, 6, 27)) +>T : Symbol(T, Decl(exported.ts, 6, 24)) +>generic : Symbol(generic, Decl(exported.ts, 6, 12)) + +export const finite = () => () => 1; +>finite : Symbol(finite, Decl(exported.ts, 7, 12)) + +export const wrapped = { arrow }; +>wrapped : Symbol(wrapped, Decl(exported.ts, 8, 12)) +>arrow : Symbol(arrow, Decl(exported.ts, 8, 24)) + +export const tuple = [arrow] as const; +>tuple : Symbol(tuple, Decl(exported.ts, 9, 12)) +>arrow : Symbol(arrow, Decl(exported.ts, 0, 12)) +>const : Symbol(const) + +export const named = function self() { return self; }; +>named : Symbol(named, Decl(exported.ts, 10, 12)) +>self : Symbol(self, Decl(exported.ts, 10, 20)) +>self : Symbol(self, Decl(exported.ts, 10, 20)) + +export const broad: unknown = function self() { return self; }; +>broad : Symbol(broad, Decl(exported.ts, 11, 12)) +>self : Symbol(self, Decl(exported.ts, 11, 29)) +>self : Symbol(self, Decl(exported.ts, 11, 29)) + +export const contextual: () => unknown = function self() { return self; }; +>contextual : Symbol(contextual, Decl(exported.ts, 12, 12)) +>self : Symbol(self, Decl(exported.ts, 12, 40)) +>self : Symbol(self, Decl(exported.ts, 12, 40)) + +export const specialized = generic; +>specialized : Symbol(specialized, Decl(exported.ts, 13, 12)) +>generic : Symbol(generic, Decl(exported.ts, 6, 12)) + +=== consumer.ts === +import { arrow, expression, declaration, first, generic, finite, wrapped, tuple } from "./exported"; +>arrow : Symbol(arrow, Decl(consumer.ts, 0, 8)) +>expression : Symbol(expression, Decl(consumer.ts, 0, 15)) +>declaration : Symbol(declaration, Decl(consumer.ts, 0, 27)) +>first : Symbol(first, Decl(consumer.ts, 0, 40)) +>generic : Symbol(generic, Decl(consumer.ts, 0, 47)) +>finite : Symbol(finite, Decl(consumer.ts, 0, 56)) +>wrapped : Symbol(wrapped, Decl(consumer.ts, 0, 64)) +>tuple : Symbol(tuple, Decl(consumer.ts, 0, 73)) + +const a: typeof arrow = arrow()()(); +>a : Symbol(a, Decl(consumer.ts, 1, 5)) +>arrow : Symbol(arrow, Decl(consumer.ts, 0, 8)) +>arrow : Symbol(arrow, Decl(consumer.ts, 0, 8)) + +const b: typeof expression = expression()()(); +>b : Symbol(b, Decl(consumer.ts, 2, 5)) +>expression : Symbol(expression, Decl(consumer.ts, 0, 15)) +>expression : Symbol(expression, Decl(consumer.ts, 0, 15)) + +const c: typeof declaration = declaration()()(); +>c : Symbol(c, Decl(consumer.ts, 3, 5)) +>declaration : Symbol(declaration, Decl(consumer.ts, 0, 27)) +>declaration : Symbol(declaration, Decl(consumer.ts, 0, 27)) + +const d: typeof first = first()()(); +>d : Symbol(d, Decl(consumer.ts, 4, 5)) +>first : Symbol(first, Decl(consumer.ts, 0, 40)) +>first : Symbol(first, Decl(consumer.ts, 0, 40)) + +const e: typeof generic = generic(1)("text")(true); +>e : Symbol(e, Decl(consumer.ts, 5, 5)) +>generic : Symbol(generic, Decl(consumer.ts, 0, 47)) +>generic : Symbol(generic, Decl(consumer.ts, 0, 47)) + +const f: number = finite()(); +>f : Symbol(f, Decl(consumer.ts, 6, 5)) +>finite : Symbol(finite, Decl(consumer.ts, 0, 56)) + +const g: typeof arrow = wrapped.arrow()(); +>g : Symbol(g, Decl(consumer.ts, 7, 5)) +>arrow : Symbol(arrow, Decl(consumer.ts, 0, 8)) +>wrapped.arrow : Symbol(arrow, Decl(exported.ts, 8, 24)) +>wrapped : Symbol(wrapped, Decl(consumer.ts, 0, 64)) +>arrow : Symbol(arrow, Decl(exported.ts, 8, 24)) + +const h: typeof arrow = tuple[0]()(); +>h : Symbol(h, Decl(consumer.ts, 8, 5)) +>arrow : Symbol(arrow, Decl(consumer.ts, 0, 8)) +>tuple : Symbol(tuple, Decl(consumer.ts, 0, 73)) +>0 : Symbol(0) + +const invalid: number = arrow()()(); +>invalid : Symbol(invalid, Decl(consumer.ts, 9, 5)) +>arrow : Symbol(arrow, Decl(consumer.ts, 0, 8)) + diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types new file mode 100644 index 0000000000000..ba681491bfed7 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types @@ -0,0 +1,179 @@ +//// [tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts] //// + +=== script.ts === +const scriptArrow = () => scriptArrow; +>scriptArrow : () => typeof scriptArrow +>() => scriptArrow : () => typeof scriptArrow +>scriptArrow : () => typeof scriptArrow + +const scriptExpression = function () { return scriptExpression; }; +>scriptExpression : () => typeof scriptExpression +>function () { return scriptExpression; } : () => typeof scriptExpression +>scriptExpression : () => typeof scriptExpression + +function scriptDeclaration() { return scriptDeclaration; } +>scriptDeclaration : () => typeof scriptDeclaration +>scriptDeclaration : () => typeof scriptDeclaration + +=== exported.ts === +export const arrow = () => arrow; +>arrow : () => typeof arrow +>() => arrow : () => typeof arrow +>arrow : () => typeof arrow + +export const expression = function () { return expression; }; +>expression : () => typeof expression +>function () { return expression; } : () => typeof expression +>expression : () => typeof expression + +export function declaration() { return declaration; } +>declaration : () => typeof declaration +>declaration : () => typeof declaration + +export const annotated: () => typeof annotated = () => annotated; +>annotated : () => typeof annotated +>annotated : () => typeof annotated +>() => annotated : () => () => typeof annotated +>annotated : () => typeof annotated + +export const first = () => second; +>first : () => () => typeof first +>() => second : () => () => typeof first +>second : () => () => typeof second + +export const second = () => first; +>second : () => () => typeof second +>() => first : () => () => typeof second +>first : () => () => typeof first + +export const generic = (value: T) => generic; +>generic : (value: T) => typeof generic +>(value: T) => generic : (value: T) => typeof generic +>value : T +>generic : (value: T) => typeof generic + +export const finite = () => () => 1; +>finite : () => () => number +>() => () => 1 : () => () => number +>() => 1 : () => number +>1 : 1 + +export const wrapped = { arrow }; +>wrapped : { arrow: () => typeof arrow; } +>{ arrow } : { arrow: () => typeof arrow; } +>arrow : () => typeof arrow + +export const tuple = [arrow] as const; +>tuple : readonly [() => typeof arrow] +>[arrow] as const : readonly [() => typeof arrow] +>[arrow] : readonly [() => typeof arrow] +>arrow : () => typeof arrow + +export const named = function self() { return self; }; +>named : () => typeof named +>function self() { return self; } : () => typeof named +>self : () => typeof named +>self : () => typeof named + +export const broad: unknown = function self() { return self; }; +>broad : unknown +>function self() { return self; } : () => typeof self +>self : () => typeof self +>self : () => typeof self + +export const contextual: () => unknown = function self() { return self; }; +>contextual : () => unknown +>function self() { return self; } : () => typeof self +>self : () => typeof self +>self : () => typeof self + +export const specialized = generic; +>specialized : (value: number) => (value: number) => typeof generic +>generic : (value: number) => (value: number) => typeof generic +>generic : (value: T) => typeof generic + +=== consumer.ts === +import { arrow, expression, declaration, first, generic, finite, wrapped, tuple } from "./exported"; +>arrow : () => typeof arrow +>expression : () => typeof expression +>declaration : () => typeof declaration +>first : () => () => typeof first +>generic : (value: T) => typeof generic +>finite : () => () => number +>wrapped : { arrow: () => typeof arrow; } +>tuple : readonly [() => typeof arrow] + +const a: typeof arrow = arrow()()(); +>a : () => typeof arrow +>arrow : () => typeof arrow +>arrow()()() : () => typeof arrow +>arrow()() : () => typeof arrow +>arrow() : () => typeof arrow +>arrow : () => typeof arrow + +const b: typeof expression = expression()()(); +>b : () => typeof expression +>expression : () => typeof expression +>expression()()() : () => typeof expression +>expression()() : () => typeof expression +>expression() : () => typeof expression +>expression : () => typeof expression + +const c: typeof declaration = declaration()()(); +>c : () => typeof declaration +>declaration : () => typeof declaration +>declaration()()() : () => typeof declaration +>declaration()() : () => typeof declaration +>declaration() : () => typeof declaration +>declaration : () => typeof declaration + +const d: typeof first = first()()(); +>d : () => () => typeof first +>first : () => () => typeof first +>first()()() : () => () => typeof import("./exported").second +>first()() : () => () => typeof first +>first() : () => () => typeof import("./exported").second +>first : () => () => typeof first + +const e: typeof generic = generic(1)("text")(true); +>e : (value: T) => typeof generic +>generic : (value: T) => typeof generic +>generic(1)("text")(true) : (value: T) => typeof generic +>generic(1)("text") : (value: T) => typeof generic +>generic(1) : (value: T) => typeof generic +>generic : (value: T) => typeof generic +>1 : 1 +>"text" : "text" +>true : true + +const f: number = finite()(); +>f : number +>finite()() : number +>finite() : () => number +>finite : () => () => number + +const g: typeof arrow = wrapped.arrow()(); +>g : () => typeof arrow +>arrow : () => typeof arrow +>wrapped.arrow()() : () => typeof arrow +>wrapped.arrow() : () => typeof arrow +>wrapped.arrow : () => typeof arrow +>wrapped : { arrow: () => typeof arrow; } +>arrow : () => typeof arrow + +const h: typeof arrow = tuple[0]()(); +>h : () => typeof arrow +>arrow : () => typeof arrow +>tuple[0]()() : () => typeof arrow +>tuple[0]() : () => typeof arrow +>tuple[0] : () => typeof arrow +>tuple : readonly [() => typeof arrow] +>0 : 0 + +const invalid: number = arrow()()(); +>invalid : number +>arrow()()() : () => typeof arrow +>arrow()() : () => typeof arrow +>arrow() : () => typeof arrow +>arrow : () => typeof arrow + diff --git a/tsc/testdata/baselines/reference/compiler/recursiveMappedArray.js b/tsc/testdata/baselines/reference/compiler/recursiveMappedArray.js new file mode 100644 index 0000000000000..86deea0cdeb33 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveMappedArray.js @@ -0,0 +1,22 @@ +//// [tests/cases/compiler/recursiveMappedArray.ts] //// + +//// [recursiveMappedArray.ts] +type Json = string | Json[]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: [] as Json[] }); + + +//// [recursiveMappedArray.js] +export const value = wrap({ items: [] }); + + +//// [recursiveMappedArray.d.ts] +type Json = string | Json[]; +type Parsed = T extends object ? { + [K in keyof T]: Parsed; +} : T; +export declare const value: { + items: Parsed; +}; +export {}; diff --git a/tsc/testdata/baselines/reference/compiler/recursiveMappedArray.symbols b/tsc/testdata/baselines/reference/compiler/recursiveMappedArray.symbols new file mode 100644 index 0000000000000..24126dfaf6518 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveMappedArray.symbols @@ -0,0 +1,32 @@ +//// [tests/cases/compiler/recursiveMappedArray.ts] //// + +=== recursiveMappedArray.ts === +type Json = string | Json[]; +>Json : Symbol(Json, Decl(recursiveMappedArray.ts, 0, 0)) +>Json : Symbol(Json, Decl(recursiveMappedArray.ts, 0, 0)) + +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +>Parsed : Symbol(Parsed, Decl(recursiveMappedArray.ts, 0, 28)) +>T : Symbol(T, Decl(recursiveMappedArray.ts, 1, 12)) +>T : Symbol(T, Decl(recursiveMappedArray.ts, 1, 12)) +>K : Symbol(K, Decl(recursiveMappedArray.ts, 1, 39)) +>T : Symbol(T, Decl(recursiveMappedArray.ts, 1, 12)) +>Parsed : Symbol(Parsed, Decl(recursiveMappedArray.ts, 0, 28)) +>T : Symbol(T, Decl(recursiveMappedArray.ts, 1, 12)) +>K : Symbol(K, Decl(recursiveMappedArray.ts, 1, 39)) +>T : Symbol(T, Decl(recursiveMappedArray.ts, 1, 12)) + +declare function wrap(value: T): Parsed; +>wrap : Symbol(wrap, Decl(recursiveMappedArray.ts, 1, 73)) +>T : Symbol(T, Decl(recursiveMappedArray.ts, 2, 22)) +>value : Symbol(value, Decl(recursiveMappedArray.ts, 2, 25)) +>T : Symbol(T, Decl(recursiveMappedArray.ts, 2, 22)) +>Parsed : Symbol(Parsed, Decl(recursiveMappedArray.ts, 0, 28)) +>T : Symbol(T, Decl(recursiveMappedArray.ts, 2, 22)) + +export const value = wrap({ items: [] as Json[] }); +>value : Symbol(value, Decl(recursiveMappedArray.ts, 3, 12)) +>wrap : Symbol(wrap, Decl(recursiveMappedArray.ts, 1, 73)) +>items : Symbol(items, Decl(recursiveMappedArray.ts, 3, 27)) +>Json : Symbol(Json, Decl(recursiveMappedArray.ts, 0, 0)) + diff --git a/tsc/testdata/baselines/reference/compiler/recursiveMappedArray.types b/tsc/testdata/baselines/reference/compiler/recursiveMappedArray.types new file mode 100644 index 0000000000000..b5fa4ed4741f9 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveMappedArray.types @@ -0,0 +1,22 @@ +//// [tests/cases/compiler/recursiveMappedArray.ts] //// + +=== recursiveMappedArray.ts === +type Json = string | Json[]; +>Json : Json + +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +>Parsed : Parsed + +declare function wrap(value: T): Parsed; +>wrap : (value: T) => Parsed +>value : T + +export const value = wrap({ items: [] as Json[] }); +>value : { items: Parsed; } +>wrap({ items: [] as Json[] }) : { items: Parsed; } +>wrap : (value: T) => Parsed +>{ items: [] as Json[] } : { items: Json[]; } +>items : Json[] +>[] as Json[] : Json[] +>[] : never[] + diff --git a/tsc/testdata/baselines/reference/compiler/recursiveMappedTupleInstantiationSharing.errors.txt b/tsc/testdata/baselines/reference/compiler/recursiveMappedTupleInstantiationSharing.errors.txt new file mode 100644 index 0000000000000..6d13c137da37b --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveMappedTupleInstantiationSharing.errors.txt @@ -0,0 +1,111 @@ +recursiveMappedTupleInstantiationSharing.ts(8,1): error TS2322: Type 'string' is not assignable to type 'number'. +recursiveMappedTupleInstantiationSharing.ts(13,1): error TS2322: Type 'string' is not assignable to type 'boolean'. +recursiveMappedTupleInstantiationSharing.ts(18,1): error TS2322: Type 'number' is not assignable to type 'string'. +recursiveMappedTupleInstantiationSharing.ts(19,1): error TS2322: Type 'string' is not assignable to type 'number'. +recursiveMappedTupleInstantiationSharing.ts(20,1): error TS2322: Type 'number' is not assignable to type 'string'. +recursiveMappedTupleInstantiationSharing.ts(35,1): error TS2322: Type 'number' is not assignable to type 'string'. +recursiveMappedTupleInstantiationSharing.ts(36,1): error TS2322: Type 'string' is not assignable to type 'number'. +recursiveMappedTupleInstantiationSharing.ts(47,1): error TS2322: Type 'string' is not assignable to type 'number'. +recursiveMappedTupleInstantiationSharing.ts(52,1): error TS2322: Type 'number' is not assignable to type 'string | Deep'. +recursiveMappedTupleInstantiationSharing.ts(55,9): error TS2322: Type 'number' is not assignable to type 'string | Deep'. +recursiveMappedTupleInstantiationSharing.ts(68,15): error TS2540: Cannot assign to '0' because it is a read-only property. + + +==== recursiveMappedTupleInstantiationSharing.ts (11 errors) ==== + type Deep = T extends object ? { [K in keyof T]: Deep } : T; + type Json = string | [Json]; + declare function direct(value: T): Deep; + declare function indirect(value: T): { value: Deep<[T]> }; + export const concrete = direct([""] as [string]); + export const recursive = direct([] as unknown as [Json]); + export const generic = indirect(1); + generic.value[0] = "error"; + ~~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + function wrap(value: T) { + return indirect(value); + } + export const twice = wrap(true); + twice.value[0] = "error"; + ~~~~~~~~~~~~~~ +!!! error TS2322: Type 'string' is not assignable to type 'boolean'. + + type Left = [string, Right?]; + type Right = [number, Left?]; + export const mutual = direct([] as unknown as Left); + mutual[0] = 0; + ~~~~~~~~~ +!!! error TS2322: Type 'number' is not assignable to type 'string'. + mutual[1]![0] = ""; + ~~~~~~~~~~~~~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + mutual[1]![1]![0] = 0; + ~~~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'number' is not assignable to type 'string'. + + type Grow = { [K in keyof T]: Grow<[T]> }; + export declare const growing: Grow<[string]>; + export const next = growing[0]; + export const again = next[0]; + + interface Box { + value: T; + self: this; + set(value: T): this; + } + declare const boxed: Box>; + export const boxedValue = boxed.value; + export const sameBox = boxed.set(boxed.value).self; + sameBox.value[0] = 0; + ~~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'number' is not assignable to type 'string'. + sameBox.value[1]![0] = ""; + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + + declare const growingBox: Box>; + export const boxedGrowing = growingBox.value; + export const boxedNext = boxedGrowing[0]; + + export function unbox(box: Box>) { + return box.value; + } + declare const numericBox: Box>; + export const unboxed = unbox(numericBox); + unboxed[0] = "error"; + ~~~~~~~~~~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + + type ArrayJson = string | ArrayJson[]; + declare const arrayBox: Box>; + export const arrayValue = arrayBox.value; + arrayValue[0] = 0; + ~~~~~~~~~~~~~ +!!! error TS2322: Type 'number' is not assignable to type 'string | Deep'. + arrayValue.map(value => { + if (typeof value !== "string") { + value[0] = 0; + ~~~~~~~~ +!!! error TS2322: Type 'number' is not assignable to type 'string | Deep'. + } + }); + + type GrowArray = { [K in keyof T]: GrowArray }; + declare const growingArrayBox: Box>; + export const growingArrayValue = growingArrayBox.value; + export const growingArrayNext = growingArrayValue[0]; + export const growingArrayAgain = growingArrayNext[0]; + + type DeepReadonly = T extends object ? { readonly [K in keyof T]: DeepReadonly } : T; + declare const readonlyBox: Box>; + export const readonlyValue = readonlyBox.value; + readonlyValue[0] = 0; + ~ +!!! error TS2540: Cannot assign to '0' because it is a read-only property. + + type NamedTuple = [name: string, number]; + type NamedArray = NamedTuple[]; + declare const namedBox: Box; + export const namedArray = namedBox.value; + export const namedTuple = namedArray[0]; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/recursiveMappedTupleInstantiationSharing.js b/tsc/testdata/baselines/reference/compiler/recursiveMappedTupleInstantiationSharing.js new file mode 100644 index 0000000000000..b675ce65ddf82 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveMappedTupleInstantiationSharing.js @@ -0,0 +1,169 @@ +//// [tests/cases/compiler/recursiveMappedTupleInstantiationSharing.ts] //// + +//// [recursiveMappedTupleInstantiationSharing.ts] +type Deep = T extends object ? { [K in keyof T]: Deep } : T; +type Json = string | [Json]; +declare function direct(value: T): Deep; +declare function indirect(value: T): { value: Deep<[T]> }; +export const concrete = direct([""] as [string]); +export const recursive = direct([] as unknown as [Json]); +export const generic = indirect(1); +generic.value[0] = "error"; +function wrap(value: T) { + return indirect(value); +} +export const twice = wrap(true); +twice.value[0] = "error"; + +type Left = [string, Right?]; +type Right = [number, Left?]; +export const mutual = direct([] as unknown as Left); +mutual[0] = 0; +mutual[1]![0] = ""; +mutual[1]![1]![0] = 0; + +type Grow = { [K in keyof T]: Grow<[T]> }; +export declare const growing: Grow<[string]>; +export const next = growing[0]; +export const again = next[0]; + +interface Box { + value: T; + self: this; + set(value: T): this; +} +declare const boxed: Box>; +export const boxedValue = boxed.value; +export const sameBox = boxed.set(boxed.value).self; +sameBox.value[0] = 0; +sameBox.value[1]![0] = ""; + +declare const growingBox: Box>; +export const boxedGrowing = growingBox.value; +export const boxedNext = boxedGrowing[0]; + +export function unbox(box: Box>) { + return box.value; +} +declare const numericBox: Box>; +export const unboxed = unbox(numericBox); +unboxed[0] = "error"; + +type ArrayJson = string | ArrayJson[]; +declare const arrayBox: Box>; +export const arrayValue = arrayBox.value; +arrayValue[0] = 0; +arrayValue.map(value => { + if (typeof value !== "string") { + value[0] = 0; + } +}); + +type GrowArray = { [K in keyof T]: GrowArray }; +declare const growingArrayBox: Box>; +export const growingArrayValue = growingArrayBox.value; +export const growingArrayNext = growingArrayValue[0]; +export const growingArrayAgain = growingArrayNext[0]; + +type DeepReadonly = T extends object ? { readonly [K in keyof T]: DeepReadonly } : T; +declare const readonlyBox: Box>; +export const readonlyValue = readonlyBox.value; +readonlyValue[0] = 0; + +type NamedTuple = [name: string, number]; +type NamedArray = NamedTuple[]; +declare const namedBox: Box; +export const namedArray = namedBox.value; +export const namedTuple = namedArray[0]; + + +//// [recursiveMappedTupleInstantiationSharing.js] +export const concrete = direct([""]); +export const recursive = direct([]); +export const generic = indirect(1); +generic.value[0] = "error"; +function wrap(value) { + return indirect(value); +} +export const twice = wrap(true); +twice.value[0] = "error"; +export const mutual = direct([]); +mutual[0] = 0; +mutual[1][0] = ""; +mutual[1][1][0] = 0; +export const next = growing[0]; +export const again = next[0]; +export const boxedValue = boxed.value; +export const sameBox = boxed.set(boxed.value).self; +sameBox.value[0] = 0; +sameBox.value[1][0] = ""; +export const boxedGrowing = growingBox.value; +export const boxedNext = boxedGrowing[0]; +export function unbox(box) { + return box.value; +} +export const unboxed = unbox(numericBox); +unboxed[0] = "error"; +export const arrayValue = arrayBox.value; +arrayValue[0] = 0; +arrayValue.map(value => { + if (typeof value !== "string") { + value[0] = 0; + } +}); +export const growingArrayValue = growingArrayBox.value; +export const growingArrayNext = growingArrayValue[0]; +export const growingArrayAgain = growingArrayNext[0]; +export const readonlyValue = readonlyBox.value; +readonlyValue[0] = 0; +export const namedArray = namedBox.value; +export const namedTuple = namedArray[0]; + + +//// [recursiveMappedTupleInstantiationSharing.d.ts] +type Deep = T extends object ? { + [K in keyof T]: Deep; +} : T; +type Json = string | [Json]; +export declare const concrete: Deep<[string]>; +export declare const recursive: Deep<[Json]>; +export declare const generic: { + value: Deep<[number]>; +}; +export declare const twice: { + value: Deep<[boolean]>; +}; +type Left = [string, Right?]; +type Right = [number, Left?]; +export declare const mutual: Deep; +type Grow = { + [K in keyof T]: Grow<[T]>; +}; +export declare const growing: Grow<[string]>; +export declare const next: [Grow<[[[string]]]>]; +export declare const again: [Grow<[[[[string]]]]>]; +interface Box { + value: T; + self: this; + set(value: T): this; +} +export declare const boxedValue: [string, (Deep | undefined)?]; +export declare const sameBox: Box>; +export declare const boxedGrowing: [Grow<[[string]]>]; +export declare const boxedNext: [Grow<[[[string]]]>]; +export declare function unbox(box: Box>): [Deep]; +export declare const unboxed: [number]; +type ArrayJson = string | ArrayJson[]; +export declare const arrayValue: (string | Deep)[]; +type GrowArray = { + [K in keyof T]: GrowArray; +}; +export declare const growingArrayValue: GrowArray[]; +export declare const growingArrayNext: GrowArray[]; +export declare const growingArrayAgain: GrowArray[]; +export declare const readonlyValue: readonly [first: number, ...rest: string[]]; +type NamedTuple = [name: string, number]; +type NamedArray = NamedTuple[]; +export declare const namedArray: NamedArray; +export declare const namedTuple: NamedTuple; +export {}; diff --git a/tsc/testdata/baselines/reference/compiler/recursiveMappedTupleInstantiationSharing.symbols b/tsc/testdata/baselines/reference/compiler/recursiveMappedTupleInstantiationSharing.symbols new file mode 100644 index 0000000000000..fcf0373b7af7a --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveMappedTupleInstantiationSharing.symbols @@ -0,0 +1,327 @@ +//// [tests/cases/compiler/recursiveMappedTupleInstantiationSharing.ts] //// + +=== recursiveMappedTupleInstantiationSharing.ts === +type Deep = T extends object ? { [K in keyof T]: Deep } : T; +>Deep : Symbol(Deep, Decl(recursiveMappedTupleInstantiationSharing.ts, 0, 0)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 0, 10)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 0, 10)) +>K : Symbol(K, Decl(recursiveMappedTupleInstantiationSharing.ts, 0, 37)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 0, 10)) +>Deep : Symbol(Deep, Decl(recursiveMappedTupleInstantiationSharing.ts, 0, 0)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 0, 10)) +>K : Symbol(K, Decl(recursiveMappedTupleInstantiationSharing.ts, 0, 37)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 0, 10)) + +type Json = string | [Json]; +>Json : Symbol(Json, Decl(recursiveMappedTupleInstantiationSharing.ts, 0, 69)) +>Json : Symbol(Json, Decl(recursiveMappedTupleInstantiationSharing.ts, 0, 69)) + +declare function direct(value: T): Deep; +>direct : Symbol(direct, Decl(recursiveMappedTupleInstantiationSharing.ts, 1, 28)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 2, 24)) +>value : Symbol(value, Decl(recursiveMappedTupleInstantiationSharing.ts, 2, 27)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 2, 24)) +>Deep : Symbol(Deep, Decl(recursiveMappedTupleInstantiationSharing.ts, 0, 0)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 2, 24)) + +declare function indirect(value: T): { value: Deep<[T]> }; +>indirect : Symbol(indirect, Decl(recursiveMappedTupleInstantiationSharing.ts, 2, 46)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 3, 26)) +>value : Symbol(value, Decl(recursiveMappedTupleInstantiationSharing.ts, 3, 29)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 3, 26)) +>value : Symbol(value, Decl(recursiveMappedTupleInstantiationSharing.ts, 3, 41)) +>Deep : Symbol(Deep, Decl(recursiveMappedTupleInstantiationSharing.ts, 0, 0)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 3, 26)) + +export const concrete = direct([""] as [string]); +>concrete : Symbol(concrete, Decl(recursiveMappedTupleInstantiationSharing.ts, 4, 12)) +>direct : Symbol(direct, Decl(recursiveMappedTupleInstantiationSharing.ts, 1, 28)) + +export const recursive = direct([] as unknown as [Json]); +>recursive : Symbol(recursive, Decl(recursiveMappedTupleInstantiationSharing.ts, 5, 12)) +>direct : Symbol(direct, Decl(recursiveMappedTupleInstantiationSharing.ts, 1, 28)) +>Json : Symbol(Json, Decl(recursiveMappedTupleInstantiationSharing.ts, 0, 69)) + +export const generic = indirect(1); +>generic : Symbol(generic, Decl(recursiveMappedTupleInstantiationSharing.ts, 6, 12)) +>indirect : Symbol(indirect, Decl(recursiveMappedTupleInstantiationSharing.ts, 2, 46)) + +generic.value[0] = "error"; +>generic.value : Symbol(value, Decl(recursiveMappedTupleInstantiationSharing.ts, 3, 41)) +>generic : Symbol(generic, Decl(recursiveMappedTupleInstantiationSharing.ts, 6, 12)) +>value : Symbol(value, Decl(recursiveMappedTupleInstantiationSharing.ts, 3, 41)) +>0 : Symbol(0) + +function wrap(value: T) { +>wrap : Symbol(wrap, Decl(recursiveMappedTupleInstantiationSharing.ts, 7, 27)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 8, 14)) +>value : Symbol(value, Decl(recursiveMappedTupleInstantiationSharing.ts, 8, 17)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 8, 14)) + + return indirect(value); +>indirect : Symbol(indirect, Decl(recursiveMappedTupleInstantiationSharing.ts, 2, 46)) +>value : Symbol(value, Decl(recursiveMappedTupleInstantiationSharing.ts, 8, 17)) +} +export const twice = wrap(true); +>twice : Symbol(twice, Decl(recursiveMappedTupleInstantiationSharing.ts, 11, 12)) +>wrap : Symbol(wrap, Decl(recursiveMappedTupleInstantiationSharing.ts, 7, 27)) + +twice.value[0] = "error"; +>twice.value : Symbol(value, Decl(recursiveMappedTupleInstantiationSharing.ts, 3, 41)) +>twice : Symbol(twice, Decl(recursiveMappedTupleInstantiationSharing.ts, 11, 12)) +>value : Symbol(value, Decl(recursiveMappedTupleInstantiationSharing.ts, 3, 41)) +>0 : Symbol(0) + +type Left = [string, Right?]; +>Left : Symbol(Left, Decl(recursiveMappedTupleInstantiationSharing.ts, 12, 25)) +>Right : Symbol(Right, Decl(recursiveMappedTupleInstantiationSharing.ts, 14, 29)) + +type Right = [number, Left?]; +>Right : Symbol(Right, Decl(recursiveMappedTupleInstantiationSharing.ts, 14, 29)) +>Left : Symbol(Left, Decl(recursiveMappedTupleInstantiationSharing.ts, 12, 25)) + +export const mutual = direct([] as unknown as Left); +>mutual : Symbol(mutual, Decl(recursiveMappedTupleInstantiationSharing.ts, 16, 12)) +>direct : Symbol(direct, Decl(recursiveMappedTupleInstantiationSharing.ts, 1, 28)) +>Left : Symbol(Left, Decl(recursiveMappedTupleInstantiationSharing.ts, 12, 25)) + +mutual[0] = 0; +>mutual : Symbol(mutual, Decl(recursiveMappedTupleInstantiationSharing.ts, 16, 12)) +>0 : Symbol(0) + +mutual[1]![0] = ""; +>mutual : Symbol(mutual, Decl(recursiveMappedTupleInstantiationSharing.ts, 16, 12)) +>1 : Symbol(1) +>0 : Symbol(0) + +mutual[1]![1]![0] = 0; +>mutual : Symbol(mutual, Decl(recursiveMappedTupleInstantiationSharing.ts, 16, 12)) +>1 : Symbol(1) +>1 : Symbol(1) +>0 : Symbol(0) + +type Grow = { [K in keyof T]: Grow<[T]> }; +>Grow : Symbol(Grow, Decl(recursiveMappedTupleInstantiationSharing.ts, 19, 22)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 21, 10)) +>K : Symbol(K, Decl(recursiveMappedTupleInstantiationSharing.ts, 21, 18)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 21, 10)) +>Grow : Symbol(Grow, Decl(recursiveMappedTupleInstantiationSharing.ts, 19, 22)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 21, 10)) + +export declare const growing: Grow<[string]>; +>growing : Symbol(growing, Decl(recursiveMappedTupleInstantiationSharing.ts, 22, 20)) +>Grow : Symbol(Grow, Decl(recursiveMappedTupleInstantiationSharing.ts, 19, 22)) + +export const next = growing[0]; +>next : Symbol(next, Decl(recursiveMappedTupleInstantiationSharing.ts, 23, 12)) +>growing : Symbol(growing, Decl(recursiveMappedTupleInstantiationSharing.ts, 22, 20)) +>0 : Symbol(0) + +export const again = next[0]; +>again : Symbol(again, Decl(recursiveMappedTupleInstantiationSharing.ts, 24, 12)) +>next : Symbol(next, Decl(recursiveMappedTupleInstantiationSharing.ts, 23, 12)) +>0 : Symbol(0) + +interface Box { +>Box : Symbol(Box, Decl(recursiveMappedTupleInstantiationSharing.ts, 24, 29)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 14)) + + value: T; +>value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 14)) + + self: this; +>self : Symbol(Box.self, Decl(recursiveMappedTupleInstantiationSharing.ts, 27, 13)) + + set(value: T): this; +>set : Symbol(Box.set, Decl(recursiveMappedTupleInstantiationSharing.ts, 28, 15)) +>value : Symbol(value, Decl(recursiveMappedTupleInstantiationSharing.ts, 29, 8)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 14)) +} +declare const boxed: Box>; +>boxed : Symbol(boxed, Decl(recursiveMappedTupleInstantiationSharing.ts, 31, 13)) +>Box : Symbol(Box, Decl(recursiveMappedTupleInstantiationSharing.ts, 24, 29)) +>Deep : Symbol(Deep, Decl(recursiveMappedTupleInstantiationSharing.ts, 0, 0)) +>Left : Symbol(Left, Decl(recursiveMappedTupleInstantiationSharing.ts, 12, 25)) + +export const boxedValue = boxed.value; +>boxedValue : Symbol(boxedValue, Decl(recursiveMappedTupleInstantiationSharing.ts, 32, 12)) +>boxed.value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) +>boxed : Symbol(boxed, Decl(recursiveMappedTupleInstantiationSharing.ts, 31, 13)) +>value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) + +export const sameBox = boxed.set(boxed.value).self; +>sameBox : Symbol(sameBox, Decl(recursiveMappedTupleInstantiationSharing.ts, 33, 12)) +>boxed.set(boxed.value).self : Symbol(Box.self, Decl(recursiveMappedTupleInstantiationSharing.ts, 27, 13)) +>boxed.set : Symbol(Box.set, Decl(recursiveMappedTupleInstantiationSharing.ts, 28, 15)) +>boxed : Symbol(boxed, Decl(recursiveMappedTupleInstantiationSharing.ts, 31, 13)) +>set : Symbol(Box.set, Decl(recursiveMappedTupleInstantiationSharing.ts, 28, 15)) +>boxed.value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) +>boxed : Symbol(boxed, Decl(recursiveMappedTupleInstantiationSharing.ts, 31, 13)) +>value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) +>self : Symbol(Box.self, Decl(recursiveMappedTupleInstantiationSharing.ts, 27, 13)) + +sameBox.value[0] = 0; +>sameBox.value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) +>sameBox : Symbol(sameBox, Decl(recursiveMappedTupleInstantiationSharing.ts, 33, 12)) +>value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) +>0 : Symbol(0) + +sameBox.value[1]![0] = ""; +>sameBox.value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) +>sameBox : Symbol(sameBox, Decl(recursiveMappedTupleInstantiationSharing.ts, 33, 12)) +>value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) +>1 : Symbol(1) +>0 : Symbol(0) + +declare const growingBox: Box>; +>growingBox : Symbol(growingBox, Decl(recursiveMappedTupleInstantiationSharing.ts, 37, 13)) +>Box : Symbol(Box, Decl(recursiveMappedTupleInstantiationSharing.ts, 24, 29)) +>Grow : Symbol(Grow, Decl(recursiveMappedTupleInstantiationSharing.ts, 19, 22)) + +export const boxedGrowing = growingBox.value; +>boxedGrowing : Symbol(boxedGrowing, Decl(recursiveMappedTupleInstantiationSharing.ts, 38, 12)) +>growingBox.value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) +>growingBox : Symbol(growingBox, Decl(recursiveMappedTupleInstantiationSharing.ts, 37, 13)) +>value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) + +export const boxedNext = boxedGrowing[0]; +>boxedNext : Symbol(boxedNext, Decl(recursiveMappedTupleInstantiationSharing.ts, 39, 12)) +>boxedGrowing : Symbol(boxedGrowing, Decl(recursiveMappedTupleInstantiationSharing.ts, 38, 12)) +>0 : Symbol(0) + +export function unbox(box: Box>) { +>unbox : Symbol(unbox, Decl(recursiveMappedTupleInstantiationSharing.ts, 39, 41)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 41, 22)) +>box : Symbol(box, Decl(recursiveMappedTupleInstantiationSharing.ts, 41, 25)) +>Box : Symbol(Box, Decl(recursiveMappedTupleInstantiationSharing.ts, 24, 29)) +>Deep : Symbol(Deep, Decl(recursiveMappedTupleInstantiationSharing.ts, 0, 0)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 41, 22)) + + return box.value; +>box.value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) +>box : Symbol(box, Decl(recursiveMappedTupleInstantiationSharing.ts, 41, 25)) +>value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) +} +declare const numericBox: Box>; +>numericBox : Symbol(numericBox, Decl(recursiveMappedTupleInstantiationSharing.ts, 44, 13)) +>Box : Symbol(Box, Decl(recursiveMappedTupleInstantiationSharing.ts, 24, 29)) +>Deep : Symbol(Deep, Decl(recursiveMappedTupleInstantiationSharing.ts, 0, 0)) + +export const unboxed = unbox(numericBox); +>unboxed : Symbol(unboxed, Decl(recursiveMappedTupleInstantiationSharing.ts, 45, 12)) +>unbox : Symbol(unbox, Decl(recursiveMappedTupleInstantiationSharing.ts, 39, 41)) +>numericBox : Symbol(numericBox, Decl(recursiveMappedTupleInstantiationSharing.ts, 44, 13)) + +unboxed[0] = "error"; +>unboxed : Symbol(unboxed, Decl(recursiveMappedTupleInstantiationSharing.ts, 45, 12)) +>0 : Symbol(0) + +type ArrayJson = string | ArrayJson[]; +>ArrayJson : Symbol(ArrayJson, Decl(recursiveMappedTupleInstantiationSharing.ts, 46, 21)) +>ArrayJson : Symbol(ArrayJson, Decl(recursiveMappedTupleInstantiationSharing.ts, 46, 21)) + +declare const arrayBox: Box>; +>arrayBox : Symbol(arrayBox, Decl(recursiveMappedTupleInstantiationSharing.ts, 49, 13)) +>Box : Symbol(Box, Decl(recursiveMappedTupleInstantiationSharing.ts, 24, 29)) +>Deep : Symbol(Deep, Decl(recursiveMappedTupleInstantiationSharing.ts, 0, 0)) +>ArrayJson : Symbol(ArrayJson, Decl(recursiveMappedTupleInstantiationSharing.ts, 46, 21)) + +export const arrayValue = arrayBox.value; +>arrayValue : Symbol(arrayValue, Decl(recursiveMappedTupleInstantiationSharing.ts, 50, 12)) +>arrayBox.value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) +>arrayBox : Symbol(arrayBox, Decl(recursiveMappedTupleInstantiationSharing.ts, 49, 13)) +>value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) + +arrayValue[0] = 0; +>arrayValue : Symbol(arrayValue, Decl(recursiveMappedTupleInstantiationSharing.ts, 50, 12)) + +arrayValue.map(value => { +>arrayValue.map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>arrayValue : Symbol(arrayValue, Decl(recursiveMappedTupleInstantiationSharing.ts, 50, 12)) +>map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>value : Symbol(value, Decl(recursiveMappedTupleInstantiationSharing.ts, 52, 15)) + + if (typeof value !== "string") { +>value : Symbol(value, Decl(recursiveMappedTupleInstantiationSharing.ts, 52, 15)) + + value[0] = 0; +>value : Symbol(value, Decl(recursiveMappedTupleInstantiationSharing.ts, 52, 15)) + } +}); + +type GrowArray = { [K in keyof T]: GrowArray }; +>GrowArray : Symbol(GrowArray, Decl(recursiveMappedTupleInstantiationSharing.ts, 56, 3)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 58, 15)) +>K : Symbol(K, Decl(recursiveMappedTupleInstantiationSharing.ts, 58, 23)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 58, 15)) +>GrowArray : Symbol(GrowArray, Decl(recursiveMappedTupleInstantiationSharing.ts, 56, 3)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 58, 15)) + +declare const growingArrayBox: Box>; +>growingArrayBox : Symbol(growingArrayBox, Decl(recursiveMappedTupleInstantiationSharing.ts, 59, 13)) +>Box : Symbol(Box, Decl(recursiveMappedTupleInstantiationSharing.ts, 24, 29)) +>GrowArray : Symbol(GrowArray, Decl(recursiveMappedTupleInstantiationSharing.ts, 56, 3)) + +export const growingArrayValue = growingArrayBox.value; +>growingArrayValue : Symbol(growingArrayValue, Decl(recursiveMappedTupleInstantiationSharing.ts, 60, 12)) +>growingArrayBox.value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) +>growingArrayBox : Symbol(growingArrayBox, Decl(recursiveMappedTupleInstantiationSharing.ts, 59, 13)) +>value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) + +export const growingArrayNext = growingArrayValue[0]; +>growingArrayNext : Symbol(growingArrayNext, Decl(recursiveMappedTupleInstantiationSharing.ts, 61, 12)) +>growingArrayValue : Symbol(growingArrayValue, Decl(recursiveMappedTupleInstantiationSharing.ts, 60, 12)) + +export const growingArrayAgain = growingArrayNext[0]; +>growingArrayAgain : Symbol(growingArrayAgain, Decl(recursiveMappedTupleInstantiationSharing.ts, 62, 12)) +>growingArrayNext : Symbol(growingArrayNext, Decl(recursiveMappedTupleInstantiationSharing.ts, 61, 12)) + +type DeepReadonly = T extends object ? { readonly [K in keyof T]: DeepReadonly } : T; +>DeepReadonly : Symbol(DeepReadonly, Decl(recursiveMappedTupleInstantiationSharing.ts, 62, 53)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 64, 18)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 64, 18)) +>K : Symbol(K, Decl(recursiveMappedTupleInstantiationSharing.ts, 64, 54)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 64, 18)) +>DeepReadonly : Symbol(DeepReadonly, Decl(recursiveMappedTupleInstantiationSharing.ts, 62, 53)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 64, 18)) +>K : Symbol(K, Decl(recursiveMappedTupleInstantiationSharing.ts, 64, 54)) +>T : Symbol(T, Decl(recursiveMappedTupleInstantiationSharing.ts, 64, 18)) + +declare const readonlyBox: Box>; +>readonlyBox : Symbol(readonlyBox, Decl(recursiveMappedTupleInstantiationSharing.ts, 65, 13)) +>Box : Symbol(Box, Decl(recursiveMappedTupleInstantiationSharing.ts, 24, 29)) +>DeepReadonly : Symbol(DeepReadonly, Decl(recursiveMappedTupleInstantiationSharing.ts, 62, 53)) + +export const readonlyValue = readonlyBox.value; +>readonlyValue : Symbol(readonlyValue, Decl(recursiveMappedTupleInstantiationSharing.ts, 66, 12)) +>readonlyBox.value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) +>readonlyBox : Symbol(readonlyBox, Decl(recursiveMappedTupleInstantiationSharing.ts, 65, 13)) +>value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) + +readonlyValue[0] = 0; +>readonlyValue : Symbol(readonlyValue, Decl(recursiveMappedTupleInstantiationSharing.ts, 66, 12)) +>0 : Symbol(0) + +type NamedTuple = [name: string, number]; +>NamedTuple : Symbol(NamedTuple, Decl(recursiveMappedTupleInstantiationSharing.ts, 67, 21)) + +type NamedArray = NamedTuple[]; +>NamedArray : Symbol(NamedArray, Decl(recursiveMappedTupleInstantiationSharing.ts, 69, 41)) +>NamedTuple : Symbol(NamedTuple, Decl(recursiveMappedTupleInstantiationSharing.ts, 67, 21)) + +declare const namedBox: Box; +>namedBox : Symbol(namedBox, Decl(recursiveMappedTupleInstantiationSharing.ts, 71, 13)) +>Box : Symbol(Box, Decl(recursiveMappedTupleInstantiationSharing.ts, 24, 29)) +>NamedArray : Symbol(NamedArray, Decl(recursiveMappedTupleInstantiationSharing.ts, 69, 41)) + +export const namedArray = namedBox.value; +>namedArray : Symbol(namedArray, Decl(recursiveMappedTupleInstantiationSharing.ts, 72, 12)) +>namedBox.value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) +>namedBox : Symbol(namedBox, Decl(recursiveMappedTupleInstantiationSharing.ts, 71, 13)) +>value : Symbol(Box.value, Decl(recursiveMappedTupleInstantiationSharing.ts, 26, 18)) + +export const namedTuple = namedArray[0]; +>namedTuple : Symbol(namedTuple, Decl(recursiveMappedTupleInstantiationSharing.ts, 73, 12)) +>namedArray : Symbol(namedArray, Decl(recursiveMappedTupleInstantiationSharing.ts, 72, 12)) + diff --git a/tsc/testdata/baselines/reference/compiler/recursiveMappedTupleInstantiationSharing.types b/tsc/testdata/baselines/reference/compiler/recursiveMappedTupleInstantiationSharing.types new file mode 100644 index 0000000000000..4f716293542ec --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveMappedTupleInstantiationSharing.types @@ -0,0 +1,334 @@ +//// [tests/cases/compiler/recursiveMappedTupleInstantiationSharing.ts] //// + +=== recursiveMappedTupleInstantiationSharing.ts === +type Deep = T extends object ? { [K in keyof T]: Deep } : T; +>Deep : Deep + +type Json = string | [Json]; +>Json : Json + +declare function direct(value: T): Deep; +>direct : (value: T) => Deep +>value : T + +declare function indirect(value: T): { value: Deep<[T]> }; +>indirect : (value: T) => { value: Deep<[T]>; } +>value : T +>value : Deep<[T]> + +export const concrete = direct([""] as [string]); +>concrete : Deep<[string]> +>direct([""] as [string]) : Deep<[string]> +>direct : (value: T) => Deep +>[""] as [string] : [string] +>[""] : [string] +>"" : "" + +export const recursive = direct([] as unknown as [Json]); +>recursive : Deep<[Json]> +>direct([] as unknown as [Json]) : Deep<[Json]> +>direct : (value: T) => Deep +>[] as unknown as [Json] : [Json] +>[] as unknown : unknown +>[] : never[] + +export const generic = indirect(1); +>generic : { value: Deep<[number]>; } +>indirect(1) : { value: Deep<[number]>; } +>indirect : (value: T) => { value: Deep<[T]>; } +>1 : 1 + +generic.value[0] = "error"; +>generic.value[0] = "error" : "error" +>generic.value[0] : number +>generic.value : Deep<[number]> +>generic : { value: Deep<[number]>; } +>value : Deep<[number]> +>0 : 0 +>"error" : "error" + +function wrap(value: T) { +>wrap : (value: T) => { value: Deep<[T]>; } +>value : T + + return indirect(value); +>indirect(value) : { value: Deep<[T]>; } +>indirect : (value: T_1) => { value: Deep<[T_1]>; } +>value : T +} +export const twice = wrap(true); +>twice : { value: Deep<[boolean]>; } +>wrap(true) : { value: Deep<[boolean]>; } +>wrap : (value: T) => { value: Deep<[T]>; } +>true : true + +twice.value[0] = "error"; +>twice.value[0] = "error" : "error" +>twice.value[0] : boolean +>twice.value : Deep<[boolean]> +>twice : { value: Deep<[boolean]>; } +>value : Deep<[boolean]> +>0 : 0 +>"error" : "error" + +type Left = [string, Right?]; +>Left : Left + +type Right = [number, Left?]; +>Right : Right + +export const mutual = direct([] as unknown as Left); +>mutual : Deep +>direct([] as unknown as Left) : Deep +>direct : (value: T) => Deep +>[] as unknown as Left : Left +>[] as unknown : unknown +>[] : never[] + +mutual[0] = 0; +>mutual[0] = 0 : 0 +>mutual[0] : string +>mutual : Deep +>0 : 0 +>0 : 0 + +mutual[1]![0] = ""; +>mutual[1]![0] = "" : "" +>mutual[1]![0] : number +>mutual[1]! : Deep +>mutual[1] : Deep | undefined +>mutual : Deep +>1 : 1 +>0 : 0 +>"" : "" + +mutual[1]![1]![0] = 0; +>mutual[1]![1]![0] = 0 : 0 +>mutual[1]![1]![0] : string +>mutual[1]![1]! : Deep +>mutual[1]![1] : Deep | undefined +>mutual[1]! : Deep +>mutual[1] : Deep | undefined +>mutual : Deep +>1 : 1 +>1 : 1 +>0 : 0 +>0 : 0 + +type Grow = { [K in keyof T]: Grow<[T]> }; +>Grow : Grow + +export declare const growing: Grow<[string]>; +>growing : Grow<[string]> + +export const next = growing[0]; +>next : [Grow<[[[string]]]>] +>growing[0] : [Grow<[[[string]]]>] +>growing : Grow<[string]> +>0 : 0 + +export const again = next[0]; +>again : [Grow<[[[[string]]]]>] +>next[0] : [Grow<[[[[string]]]]>] +>next : [Grow<[[[string]]]>] +>0 : 0 + +interface Box { + value: T; +>value : T + + self: this; +>self : this + + set(value: T): this; +>set : (value: T) => this +>value : T +} +declare const boxed: Box>; +>boxed : Box> + +export const boxedValue = boxed.value; +>boxedValue : [string, (Deep | undefined)?] +>boxed.value : [string, (Deep | undefined)?] +>boxed : Box> +>value : [string, (Deep | undefined)?] + +export const sameBox = boxed.set(boxed.value).self; +>sameBox : Box> +>boxed.set(boxed.value).self : Box> +>boxed.set(boxed.value) : Box> +>boxed.set : (value: [string, (Deep | undefined)?]) => Box> +>boxed : Box> +>set : (value: [string, (Deep | undefined)?]) => Box> +>boxed.value : [string, (Deep | undefined)?] +>boxed : Box> +>value : [string, (Deep | undefined)?] +>self : Box> + +sameBox.value[0] = 0; +>sameBox.value[0] = 0 : 0 +>sameBox.value[0] : string +>sameBox.value : [string, (Deep | undefined)?] +>sameBox : Box> +>value : [string, (Deep | undefined)?] +>0 : 0 +>0 : 0 + +sameBox.value[1]![0] = ""; +>sameBox.value[1]![0] = "" : "" +>sameBox.value[1]![0] : number +>sameBox.value[1]! : Deep +>sameBox.value[1] : Deep | undefined +>sameBox.value : [string, (Deep | undefined)?] +>sameBox : Box> +>value : [string, (Deep | undefined)?] +>1 : 1 +>0 : 0 +>"" : "" + +declare const growingBox: Box>; +>growingBox : Box> + +export const boxedGrowing = growingBox.value; +>boxedGrowing : [Grow<[[string]]>] +>growingBox.value : [Grow<[[string]]>] +>growingBox : Box> +>value : [Grow<[[string]]>] + +export const boxedNext = boxedGrowing[0]; +>boxedNext : [Grow<[[[string]]]>] +>boxedGrowing[0] : [Grow<[[[string]]]>] +>boxedGrowing : [Grow<[[string]]>] +>0 : 0 + +export function unbox(box: Box>) { +>unbox : (box: Box>) => [Deep] +>box : Box> + + return box.value; +>box.value : [Deep] +>box : Box> +>value : [Deep] +} +declare const numericBox: Box>; +>numericBox : Box> + +export const unboxed = unbox(numericBox); +>unboxed : [number] +>unbox(numericBox) : [number] +>unbox : (box: Box>) => [Deep] +>numericBox : Box> + +unboxed[0] = "error"; +>unboxed[0] = "error" : "error" +>unboxed[0] : number +>unboxed : [number] +>0 : 0 +>"error" : "error" + +type ArrayJson = string | ArrayJson[]; +>ArrayJson : ArrayJson + +declare const arrayBox: Box>; +>arrayBox : Box> + +export const arrayValue = arrayBox.value; +>arrayValue : (string | Deep)[] +>arrayBox.value : (string | Deep)[] +>arrayBox : Box> +>value : (string | Deep)[] + +arrayValue[0] = 0; +>arrayValue[0] = 0 : 0 +>arrayValue[0] : string | Deep +>arrayValue : (string | Deep)[] +>0 : 0 +>0 : 0 + +arrayValue.map(value => { +>arrayValue.map(value => { if (typeof value !== "string") { value[0] = 0; }}) : void[] +>arrayValue.map : (callbackfn: (value: string | Deep, index: number, array: (string | Deep)[]) => U, thisArg?: any) => U[] +>arrayValue : (string | Deep)[] +>map : (callbackfn: (value: string | Deep, index: number, array: (string | Deep)[]) => U, thisArg?: any) => U[] +>value => { if (typeof value !== "string") { value[0] = 0; }} : (value: string | Deep) => void +>value : string | Deep + + if (typeof value !== "string") { +>typeof value !== "string" : boolean +>typeof value : "bigint" | "boolean" | "function" | "number" | "object" | "string" | "symbol" | "undefined" +>value : string | Deep +>"string" : "string" + + value[0] = 0; +>value[0] = 0 : 0 +>value[0] : string | Deep +>value : Deep +>0 : 0 +>0 : 0 + } +}); + +type GrowArray = { [K in keyof T]: GrowArray }; +>GrowArray : GrowArray + +declare const growingArrayBox: Box>; +>growingArrayBox : Box> + +export const growingArrayValue = growingArrayBox.value; +>growingArrayValue : GrowArray[] +>growingArrayBox.value : GrowArray[] +>growingArrayBox : Box> +>value : GrowArray[] + +export const growingArrayNext = growingArrayValue[0]; +>growingArrayNext : GrowArray[] +>growingArrayValue[0] : GrowArray[] +>growingArrayValue : GrowArray[] +>0 : 0 + +export const growingArrayAgain = growingArrayNext[0]; +>growingArrayAgain : GrowArray[] +>growingArrayNext[0] : GrowArray[] +>growingArrayNext : GrowArray[] +>0 : 0 + +type DeepReadonly = T extends object ? { readonly [K in keyof T]: DeepReadonly } : T; +>DeepReadonly : DeepReadonly + +declare const readonlyBox: Box>; +>readonlyBox : Box> + +export const readonlyValue = readonlyBox.value; +>readonlyValue : readonly [first: number, ...rest: string[]] +>readonlyBox.value : readonly [first: number, ...rest: string[]] +>readonlyBox : Box> +>value : readonly [first: number, ...rest: string[]] + +readonlyValue[0] = 0; +>readonlyValue[0] = 0 : 0 +>readonlyValue[0] : any +>readonlyValue : readonly [first: number, ...rest: string[]] +>0 : 0 +>0 : 0 + +type NamedTuple = [name: string, number]; +>NamedTuple : NamedTuple + +type NamedArray = NamedTuple[]; +>NamedArray : NamedArray + +declare const namedBox: Box; +>namedBox : Box + +export const namedArray = namedBox.value; +>namedArray : NamedArray +>namedBox.value : NamedArray +>namedBox : Box +>value : NamedArray + +export const namedTuple = namedArray[0]; +>namedTuple : NamedTuple +>namedArray[0] : NamedTuple +>namedArray : NamedArray +>0 : 0 + diff --git a/tsc/testdata/baselines/reference/compiler/reverseMappedDeclarationSerialization.errors.txt b/tsc/testdata/baselines/reference/compiler/reverseMappedDeclarationSerialization.errors.txt new file mode 100644 index 0000000000000..3d014b41978e9 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/reverseMappedDeclarationSerialization.errors.txt @@ -0,0 +1,68 @@ +recursive.ts(10,14): error TS5088: The inferred type of 'recursive' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursive.ts(17,14): error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. +recursive.ts(23,14): error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. + + +==== finite.ts (0 errors) ==== + declare function unwrap(input: { [K in keyof T]: { value: T[K] } }): T; + declare const indexedInput: Record; + export const indexed = unwrap(indexedInput); + export const explicit: Record = unwrap(indexedInput); + export const shallow = unwrap({ name: { value: "text" } }); + + declare const readonlyInput: { + readonly [key: string]: { value: string | number }; + }; + export const readonlyIndexed = unwrap(readonlyInput); + + type Validator = ((input: unknown) => T | undefined) | { + [K in keyof T]: Validator; + }; + declare function decode(input: { [K in keyof T]: Validator }): T; + declare const stringValidator: (input: unknown) => string | undefined; + + export const deep = decode({ a: { b: { c: { d: stringValidator } } } }); + interface NamedInput { + leaf: typeof stringValidator; + } + declare const namedInput: { node: NamedInput }; + export const named = decode(namedInput); + + declare const nestedIndexInput: { node: Record }; + export const nestedIndexed = decode(nestedIndexInput); + + export const namedExplicit: { node: { leaf: string } } = decode(namedInput); + export const deepExplicit: { a: { b: { c: { d: string } } } } = + decode({ a: { b: { c: { d: stringValidator } } } }); + +==== recursive.ts (3 errors) ==== + type Validator = ((input: unknown) => T | undefined) | { + [K in keyof T]: Validator; + }; + declare function decode(input: { [K in keyof T]: Validator }): T; + type RecursiveInput = { + value: (input: unknown) => string; + next: RecursiveInput; + }; + declare const recursiveInput: RecursiveInput; + export const recursive = decode(recursiveInput); + ~~~~~~~~~ +!!! error TS5088: The inferred type of 'recursive' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + + interface GrowingInput { + value: (input: unknown) => T; + next: GrowingInput; + } + declare const growingInput: GrowingInput; + export const growing = decode(growingInput); + ~~~~~~~ +!!! error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. + + interface RecursiveIndexInput { + [key: string]: RecursiveIndexInput; + } + declare const recursiveIndexInput: RecursiveIndexInput; + export const recursiveIndexed = decode(recursiveIndexInput); + ~~~~~~~~~~~~~~~~ +!!! error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/reverseMappedDeclarationSerialization.js b/tsc/testdata/baselines/reference/compiler/reverseMappedDeclarationSerialization.js new file mode 100644 index 0000000000000..fbab94ef81f66 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/reverseMappedDeclarationSerialization.js @@ -0,0 +1,120 @@ +//// [tests/cases/compiler/reverseMappedDeclarationSerialization.ts] //// + +//// [finite.ts] +declare function unwrap(input: { [K in keyof T]: { value: T[K] } }): T; +declare const indexedInput: Record; +export const indexed = unwrap(indexedInput); +export const explicit: Record = unwrap(indexedInput); +export const shallow = unwrap({ name: { value: "text" } }); + +declare const readonlyInput: { + readonly [key: string]: { value: string | number }; +}; +export const readonlyIndexed = unwrap(readonlyInput); + +type Validator = ((input: unknown) => T | undefined) | { + [K in keyof T]: Validator; +}; +declare function decode(input: { [K in keyof T]: Validator }): T; +declare const stringValidator: (input: unknown) => string | undefined; + +export const deep = decode({ a: { b: { c: { d: stringValidator } } } }); +interface NamedInput { + leaf: typeof stringValidator; +} +declare const namedInput: { node: NamedInput }; +export const named = decode(namedInput); + +declare const nestedIndexInput: { node: Record }; +export const nestedIndexed = decode(nestedIndexInput); + +export const namedExplicit: { node: { leaf: string } } = decode(namedInput); +export const deepExplicit: { a: { b: { c: { d: string } } } } = + decode({ a: { b: { c: { d: stringValidator } } } }); + +//// [recursive.ts] +type Validator = ((input: unknown) => T | undefined) | { + [K in keyof T]: Validator; +}; +declare function decode(input: { [K in keyof T]: Validator }): T; +type RecursiveInput = { + value: (input: unknown) => string; + next: RecursiveInput; +}; +declare const recursiveInput: RecursiveInput; +export const recursive = decode(recursiveInput); + +interface GrowingInput { + value: (input: unknown) => T; + next: GrowingInput; +} +declare const growingInput: GrowingInput; +export const growing = decode(growingInput); + +interface RecursiveIndexInput { + [key: string]: RecursiveIndexInput; +} +declare const recursiveIndexInput: RecursiveIndexInput; +export const recursiveIndexed = decode(recursiveIndexInput); + + +//// [finite.js] +export const indexed = unwrap(indexedInput); +export const explicit = unwrap(indexedInput); +export const shallow = unwrap({ name: { value: "text" } }); +export const readonlyIndexed = unwrap(readonlyInput); +export const deep = decode({ a: { b: { c: { d: stringValidator } } } }); +export const named = decode(namedInput); +export const nestedIndexed = decode(nestedIndexInput); +export const namedExplicit = decode(namedInput); +export const deepExplicit = decode({ a: { b: { c: { d: stringValidator } } } }); +//// [recursive.js] +export const recursive = decode(recursiveInput); +export const growing = decode(growingInput); +export const recursiveIndexed = decode(recursiveIndexInput); + + +//// [finite.d.ts] +export declare const indexed: { + [x: string]: string; +}; +export declare const explicit: Record; +export declare const shallow: { + name: string; +}; +export declare const readonlyIndexed: { + readonly [x: string]: string | number; +}; +export declare const deep: { + a: { + b: { + c: { + d: string; + }; + }; + }; +}; +export declare const named: { + node: { + leaf: string; + }; +}; +export declare const nestedIndexed: { + node: { + [x: string]: string; + }; +}; +export declare const namedExplicit: { + node: { + leaf: string; + }; +}; +export declare const deepExplicit: { + a: { + b: { + c: { + d: string; + }; + }; + }; +}; diff --git a/tsc/testdata/baselines/reference/compiler/reverseMappedDeclarationSerialization.symbols b/tsc/testdata/baselines/reference/compiler/reverseMappedDeclarationSerialization.symbols new file mode 100644 index 0000000000000..3ac1b94c1c300 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/reverseMappedDeclarationSerialization.symbols @@ -0,0 +1,223 @@ +//// [tests/cases/compiler/reverseMappedDeclarationSerialization.ts] //// + +=== finite.ts === +declare function unwrap(input: { [K in keyof T]: { value: T[K] } }): T; +>unwrap : Symbol(unwrap, Decl(finite.ts, 0, 0)) +>T : Symbol(T, Decl(finite.ts, 0, 24)) +>input : Symbol(input, Decl(finite.ts, 0, 27)) +>K : Symbol(K, Decl(finite.ts, 0, 37)) +>T : Symbol(T, Decl(finite.ts, 0, 24)) +>value : Symbol(value, Decl(finite.ts, 0, 53)) +>T : Symbol(T, Decl(finite.ts, 0, 24)) +>K : Symbol(K, Decl(finite.ts, 0, 37)) +>T : Symbol(T, Decl(finite.ts, 0, 24)) + +declare const indexedInput: Record; +>indexedInput : Symbol(indexedInput, Decl(finite.ts, 1, 13)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) +>value : Symbol(value, Decl(finite.ts, 1, 44)) + +export const indexed = unwrap(indexedInput); +>indexed : Symbol(indexed, Decl(finite.ts, 2, 12)) +>unwrap : Symbol(unwrap, Decl(finite.ts, 0, 0)) +>indexedInput : Symbol(indexedInput, Decl(finite.ts, 1, 13)) + +export const explicit: Record = unwrap(indexedInput); +>explicit : Symbol(explicit, Decl(finite.ts, 3, 12)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) +>unwrap : Symbol(unwrap, Decl(finite.ts, 0, 0)) +>indexedInput : Symbol(indexedInput, Decl(finite.ts, 1, 13)) + +export const shallow = unwrap({ name: { value: "text" } }); +>shallow : Symbol(shallow, Decl(finite.ts, 4, 12)) +>unwrap : Symbol(unwrap, Decl(finite.ts, 0, 0)) +>name : Symbol(name, Decl(finite.ts, 4, 31)) +>value : Symbol(value, Decl(finite.ts, 4, 39)) + +declare const readonlyInput: { +>readonlyInput : Symbol(readonlyInput, Decl(finite.ts, 6, 13)) + + readonly [key: string]: { value: string | number }; +>key : Symbol(key, Decl(finite.ts, 7, 14)) +>value : Symbol(value, Decl(finite.ts, 7, 29)) + +}; +export const readonlyIndexed = unwrap(readonlyInput); +>readonlyIndexed : Symbol(readonlyIndexed, Decl(finite.ts, 9, 12)) +>unwrap : Symbol(unwrap, Decl(finite.ts, 0, 0)) +>readonlyInput : Symbol(readonlyInput, Decl(finite.ts, 6, 13)) + +type Validator = ((input: unknown) => T | undefined) | { +>Validator : Symbol(Validator, Decl(finite.ts, 9, 53)) +>T : Symbol(T, Decl(finite.ts, 11, 15)) +>input : Symbol(input, Decl(finite.ts, 11, 22)) +>T : Symbol(T, Decl(finite.ts, 11, 15)) + + [K in keyof T]: Validator; +>K : Symbol(K, Decl(finite.ts, 12, 5)) +>T : Symbol(T, Decl(finite.ts, 11, 15)) +>Validator : Symbol(Validator, Decl(finite.ts, 9, 53)) +>T : Symbol(T, Decl(finite.ts, 11, 15)) +>K : Symbol(K, Decl(finite.ts, 12, 5)) + +}; +declare function decode(input: { [K in keyof T]: Validator }): T; +>decode : Symbol(decode, Decl(finite.ts, 13, 2)) +>T : Symbol(T, Decl(finite.ts, 14, 24)) +>input : Symbol(input, Decl(finite.ts, 14, 27)) +>K : Symbol(K, Decl(finite.ts, 14, 37)) +>T : Symbol(T, Decl(finite.ts, 14, 24)) +>Validator : Symbol(Validator, Decl(finite.ts, 9, 53)) +>T : Symbol(T, Decl(finite.ts, 14, 24)) +>K : Symbol(K, Decl(finite.ts, 14, 37)) +>T : Symbol(T, Decl(finite.ts, 14, 24)) + +declare const stringValidator: (input: unknown) => string | undefined; +>stringValidator : Symbol(stringValidator, Decl(finite.ts, 15, 13)) +>input : Symbol(input, Decl(finite.ts, 15, 32)) + +export const deep = decode({ a: { b: { c: { d: stringValidator } } } }); +>deep : Symbol(deep, Decl(finite.ts, 17, 12)) +>decode : Symbol(decode, Decl(finite.ts, 13, 2)) +>a : Symbol(a, Decl(finite.ts, 17, 28)) +>b : Symbol(b, Decl(finite.ts, 17, 33)) +>c : Symbol(c, Decl(finite.ts, 17, 38)) +>d : Symbol(d, Decl(finite.ts, 17, 43)) +>stringValidator : Symbol(stringValidator, Decl(finite.ts, 15, 13)) + +interface NamedInput { +>NamedInput : Symbol(NamedInput, Decl(finite.ts, 17, 72)) + + leaf: typeof stringValidator; +>leaf : Symbol(NamedInput.leaf, Decl(finite.ts, 18, 22)) +>stringValidator : Symbol(stringValidator, Decl(finite.ts, 15, 13)) +} +declare const namedInput: { node: NamedInput }; +>namedInput : Symbol(namedInput, Decl(finite.ts, 21, 13)) +>node : Symbol(node, Decl(finite.ts, 21, 27)) +>NamedInput : Symbol(NamedInput, Decl(finite.ts, 17, 72)) + +export const named = decode(namedInput); +>named : Symbol(named, Decl(finite.ts, 22, 12)) +>decode : Symbol(decode, Decl(finite.ts, 13, 2)) +>namedInput : Symbol(namedInput, Decl(finite.ts, 21, 13)) + +declare const nestedIndexInput: { node: Record }; +>nestedIndexInput : Symbol(nestedIndexInput, Decl(finite.ts, 24, 13)) +>node : Symbol(node, Decl(finite.ts, 24, 33)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) +>stringValidator : Symbol(stringValidator, Decl(finite.ts, 15, 13)) + +export const nestedIndexed = decode(nestedIndexInput); +>nestedIndexed : Symbol(nestedIndexed, Decl(finite.ts, 25, 12)) +>decode : Symbol(decode, Decl(finite.ts, 13, 2)) +>nestedIndexInput : Symbol(nestedIndexInput, Decl(finite.ts, 24, 13)) + +export const namedExplicit: { node: { leaf: string } } = decode(namedInput); +>namedExplicit : Symbol(namedExplicit, Decl(finite.ts, 27, 12)) +>node : Symbol(node, Decl(finite.ts, 27, 29)) +>leaf : Symbol(leaf, Decl(finite.ts, 27, 37)) +>decode : Symbol(decode, Decl(finite.ts, 13, 2)) +>namedInput : Symbol(namedInput, Decl(finite.ts, 21, 13)) + +export const deepExplicit: { a: { b: { c: { d: string } } } } = +>deepExplicit : Symbol(deepExplicit, Decl(finite.ts, 28, 12)) +>a : Symbol(a, Decl(finite.ts, 28, 28)) +>b : Symbol(b, Decl(finite.ts, 28, 33)) +>c : Symbol(c, Decl(finite.ts, 28, 38)) +>d : Symbol(d, Decl(finite.ts, 28, 43)) + + decode({ a: { b: { c: { d: stringValidator } } } }); +>decode : Symbol(decode, Decl(finite.ts, 13, 2)) +>a : Symbol(a, Decl(finite.ts, 29, 12)) +>b : Symbol(b, Decl(finite.ts, 29, 17)) +>c : Symbol(c, Decl(finite.ts, 29, 22)) +>d : Symbol(d, Decl(finite.ts, 29, 27)) +>stringValidator : Symbol(stringValidator, Decl(finite.ts, 15, 13)) + +=== recursive.ts === +type Validator = ((input: unknown) => T | undefined) | { +>Validator : Symbol(Validator, Decl(recursive.ts, 0, 0)) +>T : Symbol(T, Decl(recursive.ts, 0, 15)) +>input : Symbol(input, Decl(recursive.ts, 0, 22)) +>T : Symbol(T, Decl(recursive.ts, 0, 15)) + + [K in keyof T]: Validator; +>K : Symbol(K, Decl(recursive.ts, 1, 5)) +>T : Symbol(T, Decl(recursive.ts, 0, 15)) +>Validator : Symbol(Validator, Decl(recursive.ts, 0, 0)) +>T : Symbol(T, Decl(recursive.ts, 0, 15)) +>K : Symbol(K, Decl(recursive.ts, 1, 5)) + +}; +declare function decode(input: { [K in keyof T]: Validator }): T; +>decode : Symbol(decode, Decl(recursive.ts, 2, 2)) +>T : Symbol(T, Decl(recursive.ts, 3, 24)) +>input : Symbol(input, Decl(recursive.ts, 3, 27)) +>K : Symbol(K, Decl(recursive.ts, 3, 37)) +>T : Symbol(T, Decl(recursive.ts, 3, 24)) +>Validator : Symbol(Validator, Decl(recursive.ts, 0, 0)) +>T : Symbol(T, Decl(recursive.ts, 3, 24)) +>K : Symbol(K, Decl(recursive.ts, 3, 37)) +>T : Symbol(T, Decl(recursive.ts, 3, 24)) + +type RecursiveInput = { +>RecursiveInput : Symbol(RecursiveInput, Decl(recursive.ts, 3, 74)) + + value: (input: unknown) => string; +>value : Symbol(value, Decl(recursive.ts, 4, 23)) +>input : Symbol(input, Decl(recursive.ts, 5, 12)) + + next: RecursiveInput; +>next : Symbol(next, Decl(recursive.ts, 5, 38)) +>RecursiveInput : Symbol(RecursiveInput, Decl(recursive.ts, 3, 74)) + +}; +declare const recursiveInput: RecursiveInput; +>recursiveInput : Symbol(recursiveInput, Decl(recursive.ts, 8, 13)) +>RecursiveInput : Symbol(RecursiveInput, Decl(recursive.ts, 3, 74)) + +export const recursive = decode(recursiveInput); +>recursive : Symbol(recursive, Decl(recursive.ts, 9, 12)) +>decode : Symbol(decode, Decl(recursive.ts, 2, 2)) +>recursiveInput : Symbol(recursiveInput, Decl(recursive.ts, 8, 13)) + +interface GrowingInput { +>GrowingInput : Symbol(GrowingInput, Decl(recursive.ts, 9, 48)) +>T : Symbol(T, Decl(recursive.ts, 11, 23)) + + value: (input: unknown) => T; +>value : Symbol(GrowingInput.value, Decl(recursive.ts, 11, 27)) +>input : Symbol(input, Decl(recursive.ts, 12, 12)) +>T : Symbol(T, Decl(recursive.ts, 11, 23)) + + next: GrowingInput; +>next : Symbol(GrowingInput.next, Decl(recursive.ts, 12, 33)) +>GrowingInput : Symbol(GrowingInput, Decl(recursive.ts, 9, 48)) +>T : Symbol(T, Decl(recursive.ts, 11, 23)) +} +declare const growingInput: GrowingInput; +>growingInput : Symbol(growingInput, Decl(recursive.ts, 15, 13)) +>GrowingInput : Symbol(GrowingInput, Decl(recursive.ts, 9, 48)) + +export const growing = decode(growingInput); +>growing : Symbol(growing, Decl(recursive.ts, 16, 12)) +>decode : Symbol(decode, Decl(recursive.ts, 2, 2)) +>growingInput : Symbol(growingInput, Decl(recursive.ts, 15, 13)) + +interface RecursiveIndexInput { +>RecursiveIndexInput : Symbol(RecursiveIndexInput, Decl(recursive.ts, 16, 44)) + + [key: string]: RecursiveIndexInput; +>key : Symbol(key, Decl(recursive.ts, 19, 5)) +>RecursiveIndexInput : Symbol(RecursiveIndexInput, Decl(recursive.ts, 16, 44)) +} +declare const recursiveIndexInput: RecursiveIndexInput; +>recursiveIndexInput : Symbol(recursiveIndexInput, Decl(recursive.ts, 21, 13)) +>RecursiveIndexInput : Symbol(RecursiveIndexInput, Decl(recursive.ts, 16, 44)) + +export const recursiveIndexed = decode(recursiveIndexInput); +>recursiveIndexed : Symbol(recursiveIndexed, Decl(recursive.ts, 22, 12)) +>decode : Symbol(decode, Decl(recursive.ts, 2, 2)) +>recursiveIndexInput : Symbol(recursiveIndexInput, Decl(recursive.ts, 21, 13)) + diff --git a/tsc/testdata/baselines/reference/compiler/reverseMappedDeclarationSerialization.types b/tsc/testdata/baselines/reference/compiler/reverseMappedDeclarationSerialization.types new file mode 100644 index 0000000000000..f6dccb1174418 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/reverseMappedDeclarationSerialization.types @@ -0,0 +1,191 @@ +//// [tests/cases/compiler/reverseMappedDeclarationSerialization.ts] //// + +=== finite.ts === +declare function unwrap(input: { [K in keyof T]: { value: T[K] } }): T; +>unwrap : (input: { [K in keyof T]: { value: T[K]; }; }) => T +>input : { [K in keyof T]: { value: T[K]; }; } +>value : T[K] + +declare const indexedInput: Record; +>indexedInput : Record +>value : string + +export const indexed = unwrap(indexedInput); +>indexed : { [x: string]: any; } +>unwrap(indexedInput) : { [x: string]: any; } +>unwrap : (input: { [K in keyof T]: { value: T[K]; }; }) => T +>indexedInput : Record + +export const explicit: Record = unwrap(indexedInput); +>explicit : Record +>unwrap(indexedInput) : { [x: string]: any; } +>unwrap : (input: { [K in keyof T]: { value: T[K]; }; }) => T +>indexedInput : Record + +export const shallow = unwrap({ name: { value: "text" } }); +>shallow : { name: string; } +>unwrap({ name: { value: "text" } }) : { name: string; } +>unwrap : (input: { [K in keyof T]: { value: T[K]; }; }) => T +>{ name: { value: "text" } } : { name: { value: string; }; } +>name : { value: string; } +>{ value: "text" } : { value: string; } +>value : string +>"text" : "text" + +declare const readonlyInput: { +>readonlyInput : { readonly [key: string]: { value: string | number; }; } + + readonly [key: string]: { value: string | number }; +>key : string +>value : string | number + +}; +export const readonlyIndexed = unwrap(readonlyInput); +>readonlyIndexed : { readonly [x: string]: any; } +>unwrap(readonlyInput) : { readonly [x: string]: any; } +>unwrap : (input: { [K in keyof T]: { value: T[K]; }; }) => T +>readonlyInput : { readonly [key: string]: { value: string | number; }; } + +type Validator = ((input: unknown) => T | undefined) | { +>Validator : Validator +>input : unknown + + [K in keyof T]: Validator; +}; +declare function decode(input: { [K in keyof T]: Validator }): T; +>decode : (input: { [K in keyof T]: Validator; }) => T +>input : { [K in keyof T]: Validator; } + +declare const stringValidator: (input: unknown) => string | undefined; +>stringValidator : (input: unknown) => string | undefined +>input : unknown + +export const deep = decode({ a: { b: { c: { d: stringValidator } } } }); +>deep : { a: { b: { c: { d: any; }; }; }; } +>decode({ a: { b: { c: { d: stringValidator } } } }) : { a: { b: { c: { d: any; }; }; }; } +>decode : (input: { [K in keyof T]: Validator; }) => T +>{ a: { b: { c: { d: stringValidator } } } } : { a: { b: { c: { d: (input: unknown) => string | undefined; }; }; }; } +>a : { b: { c: { d: (input: unknown) => string | undefined; }; }; } +>{ b: { c: { d: stringValidator } } } : { b: { c: { d: (input: unknown) => string | undefined; }; }; } +>b : { c: { d: (input: unknown) => string | undefined; }; } +>{ c: { d: stringValidator } } : { c: { d: (input: unknown) => string | undefined; }; } +>c : { d: (input: unknown) => string | undefined; } +>{ d: stringValidator } : { d: (input: unknown) => string | undefined; } +>d : (input: unknown) => string | undefined +>stringValidator : (input: unknown) => string | undefined + +interface NamedInput { + leaf: typeof stringValidator; +>leaf : (input: unknown) => string | undefined +>stringValidator : (input: unknown) => string | undefined +} +declare const namedInput: { node: NamedInput }; +>namedInput : { node: NamedInput; } +>node : NamedInput + +export const named = decode(namedInput); +>named : { node: { leaf: any; }; } +>decode(namedInput) : { node: { leaf: any; }; } +>decode : (input: { [K in keyof T]: Validator; }) => T +>namedInput : { node: NamedInput; } + +declare const nestedIndexInput: { node: Record }; +>nestedIndexInput : { node: Record; } +>node : Record string | undefined> +>stringValidator : (input: unknown) => string | undefined + +export const nestedIndexed = decode(nestedIndexInput); +>nestedIndexed : { node: { [x: string]: any; }; } +>decode(nestedIndexInput) : { node: { [x: string]: any; }; } +>decode : (input: { [K in keyof T]: Validator; }) => T +>nestedIndexInput : { node: Record; } + +export const namedExplicit: { node: { leaf: string } } = decode(namedInput); +>namedExplicit : { node: { leaf: string; }; } +>node : { leaf: string; } +>leaf : string +>decode(namedInput) : { node: { leaf: any; }; } +>decode : (input: { [K in keyof T]: Validator; }) => T +>namedInput : { node: NamedInput; } + +export const deepExplicit: { a: { b: { c: { d: string } } } } = +>deepExplicit : { a: { b: { c: { d: string; }; }; }; } +>a : { b: { c: { d: string; }; }; } +>b : { c: { d: string; }; } +>c : { d: string; } +>d : string + + decode({ a: { b: { c: { d: stringValidator } } } }); +>decode({ a: { b: { c: { d: stringValidator } } } }) : { a: { b: { c: { d: any; }; }; }; } +>decode : (input: { [K in keyof T]: Validator; }) => T +>{ a: { b: { c: { d: stringValidator } } } } : { a: { b: { c: { d: (input: unknown) => string | undefined; }; }; }; } +>a : { b: { c: { d: (input: unknown) => string | undefined; }; }; } +>{ b: { c: { d: stringValidator } } } : { b: { c: { d: (input: unknown) => string | undefined; }; }; } +>b : { c: { d: (input: unknown) => string | undefined; }; } +>{ c: { d: stringValidator } } : { c: { d: (input: unknown) => string | undefined; }; } +>c : { d: (input: unknown) => string | undefined; } +>{ d: stringValidator } : { d: (input: unknown) => string | undefined; } +>d : (input: unknown) => string | undefined +>stringValidator : (input: unknown) => string | undefined + +=== recursive.ts === +type Validator = ((input: unknown) => T | undefined) | { +>Validator : Validator +>input : unknown + + [K in keyof T]: Validator; +}; +declare function decode(input: { [K in keyof T]: Validator }): T; +>decode : (input: { [K in keyof T]: Validator; }) => T +>input : { [K in keyof T]: Validator; } + +type RecursiveInput = { +>RecursiveInput : RecursiveInput + + value: (input: unknown) => string; +>value : (input: unknown) => string +>input : unknown + + next: RecursiveInput; +>next : RecursiveInput + +}; +declare const recursiveInput: RecursiveInput; +>recursiveInput : RecursiveInput + +export const recursive = decode(recursiveInput); +>recursive : { value: string; next: { value: string; next: { value: string; next: { value: any; next: any; }; }; }; } +>decode(recursiveInput) : { value: string; next: { value: string; next: { value: string; next: { value: any; next: any; }; }; }; } +>decode : (input: { [K in keyof T]: Validator; }) => T +>recursiveInput : RecursiveInput + +interface GrowingInput { + value: (input: unknown) => T; +>value : (input: unknown) => T +>input : unknown + + next: GrowingInput; +>next : GrowingInput +} +declare const growingInput: GrowingInput; +>growingInput : GrowingInput + +export const growing = decode(growingInput); +>growing : { value: string; next: { value: any; next: any; }; } +>decode(growingInput) : { value: string; next: { value: any; next: any; }; } +>decode : (input: { [K in keyof T]: Validator; }) => T +>growingInput : GrowingInput + +interface RecursiveIndexInput { + [key: string]: RecursiveIndexInput; +>key : string +} +declare const recursiveIndexInput: RecursiveIndexInput; +>recursiveIndexInput : RecursiveIndexInput + +export const recursiveIndexed = decode(recursiveIndexInput); +>recursiveIndexed : { [x: string]: any; } +>decode(recursiveIndexInput) : { [x: string]: any; } +>decode : (input: { [K in keyof T]: Validator; }) => T +>recursiveIndexInput : RecursiveIndexInput + diff --git a/tsc/testdata/baselines/reference/compiler/stripMembersOptionality2(exactoptionalpropertytypes=false).types b/tsc/testdata/baselines/reference/compiler/stripMembersOptionality2(exactoptionalpropertytypes=false).types index 4730e5e8beb58..feae6a6369322 100644 --- a/tsc/testdata/baselines/reference/compiler/stripMembersOptionality2(exactoptionalpropertytypes=false).types +++ b/tsc/testdata/baselines/reference/compiler/stripMembersOptionality2(exactoptionalpropertytypes=false).types @@ -14,10 +14,10 @@ const obj1: WithObject1 = { a: undefined }; >undefined : undefined type WithArray1 = Required<[(string | undefined)?]>; ->WithArray1 : [string] +>WithArray1 : WithArray1 const tup1: WithArray1 = [undefined]; ->tup1 : [string] +>tup1 : WithArray1 >[undefined] : [undefined] >undefined : undefined @@ -38,10 +38,10 @@ const obj2: WithObject2 = { a: "1", b: undefined }; >undefined : undefined type WithArray2 = ToStringOrUnd<[1, 2?]>; ->WithArray2 : [string | undefined, string] +>WithArray2 : WithArray2 const tup2: WithArray2 = ["1", undefined]; ->tup2 : [string | undefined, string] +>tup2 : WithArray2 >["1", undefined] : [string, undefined] >"1" : "1" >undefined : undefined diff --git a/tsc/testdata/baselines/reference/compiler/stripMembersOptionality2(exactoptionalpropertytypes=true).types b/tsc/testdata/baselines/reference/compiler/stripMembersOptionality2(exactoptionalpropertytypes=true).types index 9535f5b10f01e..feae6a6369322 100644 --- a/tsc/testdata/baselines/reference/compiler/stripMembersOptionality2(exactoptionalpropertytypes=true).types +++ b/tsc/testdata/baselines/reference/compiler/stripMembersOptionality2(exactoptionalpropertytypes=true).types @@ -14,10 +14,10 @@ const obj1: WithObject1 = { a: undefined }; >undefined : undefined type WithArray1 = Required<[(string | undefined)?]>; ->WithArray1 : [string | undefined] +>WithArray1 : WithArray1 const tup1: WithArray1 = [undefined]; ->tup1 : [string | undefined] +>tup1 : WithArray1 >[undefined] : [undefined] >undefined : undefined @@ -38,10 +38,10 @@ const obj2: WithObject2 = { a: "1", b: undefined }; >undefined : undefined type WithArray2 = ToStringOrUnd<[1, 2?]>; ->WithArray2 : [string | undefined, string | undefined] +>WithArray2 : WithArray2 const tup2: WithArray2 = ["1", undefined]; ->tup2 : [string | undefined, string | undefined] +>tup2 : WithArray2 >["1", undefined] : [string, undefined] >"1" : "1" >undefined : undefined diff --git a/tsc/testdata/baselines/reference/compiler/thisInPropertyBoundDeclarations.types b/tsc/testdata/baselines/reference/compiler/thisInPropertyBoundDeclarations.types index 2c6de8bb65745..bc2ec11e4e27f 100644 --- a/tsc/testdata/baselines/reference/compiler/thisInPropertyBoundDeclarations.types +++ b/tsc/testdata/baselines/reference/compiler/thisInPropertyBoundDeclarations.types @@ -91,8 +91,8 @@ class A { }; prop5 = () => { ->prop5 : () => { a: () => { a: () => any; }; } ->() => { return { a: function() { return this; }, }; } : () => { a: () => { a: () => any; }; } +>prop5 : () => { a: () => any; } +>() => { return { a: function() { return this; }, }; } : () => { a: () => any; } return { >{ a: function() { return this; }, } : { a: () => { a: () => any; }; } diff --git a/tsc/testdata/baselines/reference/conformance/commonJSImportNestedClassTypeReference.errors.txt b/tsc/testdata/baselines/reference/conformance/commonJSImportNestedClassTypeReference.errors.txt index 109a57b0b746b..230158e37d47e 100644 --- a/tsc/testdata/baselines/reference/conformance/commonJSImportNestedClassTypeReference.errors.txt +++ b/tsc/testdata/baselines/reference/conformance/commonJSImportNestedClassTypeReference.errors.txt @@ -1,4 +1,5 @@ main.js(2,13): error TS2749: 'K' refers to a value, but is being used as a type here. Did you mean 'typeof K'? +mod1.js(7,1): error TS5088: The inferred type of 'K' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. ==== main.js (1 errors) ==== @@ -10,7 +11,7 @@ main.js(2,13): error TS2749: 'K' refers to a value, but is being used as a type k.values() } -==== mod1.js (0 errors) ==== +==== mod1.js (1 errors) ==== var NS = {} NS.K =class { values() { @@ -18,4 +19,6 @@ main.js(2,13): error TS2749: 'K' refers to a value, but is being used as a type } } exports.K = NS.K; + ~~~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'K' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/conformance/commonJSImportNestedClassTypeReference.js b/tsc/testdata/baselines/reference/conformance/commonJSImportNestedClassTypeReference.js index 99a0897eb679b..2e19813a3b123 100644 --- a/tsc/testdata/baselines/reference/conformance/commonJSImportNestedClassTypeReference.js +++ b/tsc/testdata/baselines/reference/conformance/commonJSImportNestedClassTypeReference.js @@ -35,11 +35,5 @@ function f(k) { } -//// [mod1.d.ts] -export declare var K: { - new (): { - values(): /*elided*/ any; - }; -}; //// [main.d.ts] export {}; diff --git a/tsc/testdata/baselines/reference/conformance/functionImplementations.types b/tsc/testdata/baselines/reference/conformance/functionImplementations.types index b662a3760164f..c7ddfd1fe0646 100644 --- a/tsc/testdata/baselines/reference/conformance/functionImplementations.types +++ b/tsc/testdata/baselines/reference/conformance/functionImplementations.types @@ -11,10 +11,10 @@ var v: void = function () { } (); var a: any = function f() { >a : any >function f() { return f;} : () => typeof f ->f : () => typeof a +>f : () => typeof f return f; ->f : () => typeof a +>f : () => typeof f }; var a: any = function f() { @@ -32,14 +32,14 @@ var a: any = function f() { var a: any = function f() { >a : any >function f() { var x = f; return x;} : () => typeof f ->f : () => typeof a +>f : () => typeof f var x = f; ->x : () => typeof a ->f : () => typeof a +>x : () => typeof f +>f : () => typeof f return x; ->x : () => typeof a +>x : () => typeof f }; diff --git a/tsc/testdata/baselines/reference/conformance/localesObjectArgument.types b/tsc/testdata/baselines/reference/conformance/localesObjectArgument.types index 4738250f85dbf..c97e4a1856cab 100644 --- a/tsc/testdata/baselines/reference/conformance/localesObjectArgument.types +++ b/tsc/testdata/baselines/reference/conformance/localesObjectArgument.types @@ -43,7 +43,7 @@ const str = ""; >"" : "" const readonlyLocales: Readonly = ['de-DE', 'ja-JP']; ->readonlyLocales : readonly string[] +>readonlyLocales : Readonly >['de-DE', 'ja-JP'] : string[] >'de-DE' : "de-DE" >'ja-JP' : "ja-JP" @@ -199,7 +199,7 @@ new Intl.PluralRules(readonlyLocales); >Intl.PluralRules : Intl.PluralRulesConstructor >Intl : typeof Intl >PluralRules : Intl.PluralRulesConstructor ->readonlyLocales : readonly string[] +>readonlyLocales : Readonly Intl.PluralRules.supportedLocalesOf(enUS); >Intl.PluralRules.supportedLocalesOf(enUS) : string[] @@ -228,7 +228,7 @@ Intl.PluralRules.supportedLocalesOf(readonlyLocales); >Intl : typeof Intl >PluralRules : Intl.PluralRulesConstructor >supportedLocalesOf : { (locales: string | readonly string[], options?: { localeMatcher?: "lookup" | "best fit"; }): string[]; (locales: Intl.LocalesArgument, options?: { localeMatcher?: "lookup" | "best fit"; }): string[]; } ->readonlyLocales : readonly string[] +>readonlyLocales : Readonly new Intl.RelativeTimeFormat(enUS); >new Intl.RelativeTimeFormat(enUS) : Intl.RelativeTimeFormat @@ -251,7 +251,7 @@ new Intl.RelativeTimeFormat(readonlyLocales); >Intl.RelativeTimeFormat : { new (locales?: Intl.LocalesArgument, options?: Intl.RelativeTimeFormatOptions): Intl.RelativeTimeFormat; supportedLocalesOf(locales?: Intl.LocalesArgument, options?: Intl.RelativeTimeFormatOptions): Intl.UnicodeBCP47LocaleIdentifier[]; } >Intl : typeof Intl >RelativeTimeFormat : { new (locales?: Intl.LocalesArgument, options?: Intl.RelativeTimeFormatOptions): Intl.RelativeTimeFormat; supportedLocalesOf(locales?: Intl.LocalesArgument, options?: Intl.RelativeTimeFormatOptions): Intl.UnicodeBCP47LocaleIdentifier[]; } ->readonlyLocales : readonly string[] +>readonlyLocales : Readonly Intl.RelativeTimeFormat.supportedLocalesOf(enUS); >Intl.RelativeTimeFormat.supportedLocalesOf(enUS) : string[] @@ -280,7 +280,7 @@ Intl.RelativeTimeFormat.supportedLocalesOf(readonlyLocales); >Intl : typeof Intl >RelativeTimeFormat : { new (locales?: Intl.LocalesArgument, options?: Intl.RelativeTimeFormatOptions): Intl.RelativeTimeFormat; supportedLocalesOf(locales?: Intl.LocalesArgument, options?: Intl.RelativeTimeFormatOptions): Intl.UnicodeBCP47LocaleIdentifier[]; } >supportedLocalesOf : (locales?: Intl.LocalesArgument, options?: Intl.RelativeTimeFormatOptions) => Intl.UnicodeBCP47LocaleIdentifier[] ->readonlyLocales : readonly string[] +>readonlyLocales : Readonly new Intl.Collator(enUS); >new Intl.Collator(enUS) : Intl.Collator @@ -303,7 +303,7 @@ new Intl.Collator(readonlyLocales); >Intl.Collator : Intl.CollatorConstructor >Intl : typeof Intl >Collator : Intl.CollatorConstructor ->readonlyLocales : readonly string[] +>readonlyLocales : Readonly Intl.Collator.supportedLocalesOf(enUS); >Intl.Collator.supportedLocalesOf(enUS) : string[] @@ -346,7 +346,7 @@ new Intl.DateTimeFormat(readonlyLocales); >Intl.DateTimeFormat : Intl.DateTimeFormatConstructor >Intl : typeof Intl >DateTimeFormat : Intl.DateTimeFormatConstructor ->readonlyLocales : readonly string[] +>readonlyLocales : Readonly Intl.DateTimeFormat.supportedLocalesOf(enUS); >Intl.DateTimeFormat.supportedLocalesOf(enUS) : string[] @@ -375,7 +375,7 @@ Intl.DateTimeFormat.supportedLocalesOf(readonlyLocales); >Intl : typeof Intl >DateTimeFormat : Intl.DateTimeFormatConstructor >supportedLocalesOf : { (locales: string | string[], options?: Intl.DateTimeFormatOptions): string[]; (locales: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string[]; } ->readonlyLocales : readonly string[] +>readonlyLocales : Readonly new Intl.NumberFormat(enUS); >new Intl.NumberFormat(enUS) : Intl.NumberFormat @@ -398,7 +398,7 @@ new Intl.NumberFormat(readonlyLocales); >Intl.NumberFormat : Intl.NumberFormatConstructor >Intl : typeof Intl >NumberFormat : Intl.NumberFormatConstructor ->readonlyLocales : readonly string[] +>readonlyLocales : Readonly Intl.NumberFormat.supportedLocalesOf(enUS); >Intl.NumberFormat.supportedLocalesOf(enUS) : string[] @@ -416,5 +416,5 @@ Intl.NumberFormat.supportedLocalesOf(readonlyLocales); >Intl : typeof Intl >NumberFormat : Intl.NumberFormatConstructor >supportedLocalesOf : { (locales: string | string[], options?: Intl.NumberFormatOptions): string[]; (locales: Intl.LocalesArgument, options?: Intl.NumberFormatOptions): string[]; } ->readonlyLocales : readonly string[] +>readonlyLocales : Readonly diff --git a/tsc/testdata/baselines/reference/conformance/mappedTypeWithAny.types b/tsc/testdata/baselines/reference/conformance/mappedTypeWithAny.types index d579f74c2c1fb..c8118292998c6 100644 --- a/tsc/testdata/baselines/reference/conformance/mappedTypeWithAny.types +++ b/tsc/testdata/baselines/reference/conformance/mappedTypeWithAny.types @@ -80,7 +80,7 @@ type IndirectArrayish = Objectish; function bar(arrayish: Arrayish, objectish: Objectish, indirectArrayish: IndirectArrayish) { >bar : (arrayish: Arrayish, objectish: Objectish, indirectArrayish: IndirectArrayish) => void ->arrayish : any[] +>arrayish : Arrayish >objectish : Objectish >indirectArrayish : Objectish @@ -88,9 +88,9 @@ function bar(arrayish: Arrayish, objectish: Objectish, indirectArrayis >arr : any[] arr = arrayish; ->arr = arrayish : any[] +>arr = arrayish : Arrayish >arr : any[] ->arrayish : any[] +>arrayish : Arrayish arr = objectish; >arr = objectish : Objectish diff --git a/tsc/testdata/baselines/reference/conformance/mappedTypesArraysTuples.types b/tsc/testdata/baselines/reference/conformance/mappedTypesArraysTuples.types index 42385b0edbf72..2b05099afeded 100644 --- a/tsc/testdata/baselines/reference/conformance/mappedTypesArraysTuples.types +++ b/tsc/testdata/baselines/reference/conformance/mappedTypesArraysTuples.types @@ -9,55 +9,55 @@ type Boxified = { [P in keyof T]: Box }; >Boxified : Boxified type T00 = Boxified<[number, string?, ...boolean[]]>; ->T00 : [Box, (Box | undefined)?, ...Box[]] +>T00 : T00 type T01 = Partial<[number, string?, ...boolean[]]>; ->T01 : [(number | undefined)?, (string | undefined)?, ...(boolean | undefined)[]] +>T01 : T01 type T02 = Required<[number, string?, ...boolean[]]>; ->T02 : [number, string, ...boolean[]] +>T02 : T02 type T10 = Boxified; ->T10 : Box[] +>T10 : T10 type T11 = Partial; ->T11 : (string | undefined)[] +>T11 : T11 type T12 = Required; ->T12 : string[] +>T12 : T12 type T13 = Boxified>; ->T13 : readonly Box[] +>T13 : T13 type T14 = Partial>; ->T14 : readonly (string | undefined)[] +>T14 : T14 type T15 = Required>; ->T15 : readonly string[] +>T15 : T15 type T20 = Boxified<(string | undefined)[]>; ->T20 : Box[] +>T20 : T20 type T21 = Partial<(string | undefined)[]>; ->T21 : (string | undefined)[] +>T21 : T21 type T22 = Required<(string | undefined)[]>; ->T22 : string[] +>T22 : T22 type T23 = Boxified>; ->T23 : readonly Box[] +>T23 : T23 type T24 = Partial>; ->T24 : readonly (string | undefined)[] +>T24 : T24 type T25 = Required>; ->T25 : readonly string[] +>T25 : T25 type T30 = Boxified>; ->T30 : Box[] +>T30 : T30 type T31 = Partial>; ->T31 : (Box | undefined)[] +>T31 : T31 type A = { a: string }; >A : A @@ -74,19 +74,19 @@ type ReadWrite = { -readonly [P in keyof T] : T[P] }; >ReadWrite : ReadWrite type T50 = Readonly; ->T50 : readonly string[] +>T50 : T50 type T51 = Readonly<[number, number]>; ->T51 : readonly [number, number] +>T51 : T51 type T52 = Partial>; ->T52 : readonly (string | undefined)[] +>T52 : T52 type T53 = Readonly>; ->T53 : readonly (string | undefined)[] +>T53 : T53 type T54 = ReadWrite>; ->T54 : string[] +>T54 : T54 declare function unboxify(x: Boxified): T; >unboxify : (x: Boxified) => T @@ -172,29 +172,29 @@ function f1(a: number, b: Promise, c: string[], d: Promise) { >d : Promise let x1 = all(a); ->x1 : Promise<[number]> ->all(a) : Promise<[number]> +>x1 : Promise> +>all(a) : Promise> >all : (...values: T) => Promise> >a : number let x2 = all(a, b); ->x2 : Promise<[number, number]> ->all(a, b) : Promise<[number, number]> +>x2 : Promise]>> +>all(a, b) : Promise]>> >all : (...values: T) => Promise> >a : number >b : Promise let x3 = all(a, b, c); ->x3 : Promise<[number, number, string[]]> ->all(a, b, c) : Promise<[number, number, string[]]> +>x3 : Promise, string[]]>> +>all(a, b, c) : Promise, string[]]>> >all : (...values: T) => Promise> >a : number >b : Promise >c : string[] let x4 = all(a, b, c, d); ->x4 : Promise<[number, number, string[], string[]]> ->all(a, b, c, d) : Promise<[number, number, string[], string[]]> +>x4 : Promise, string[], Promise]>> +>all(a, b, c, d) : Promise, string[], Promise]>> >all : (...values: T) => Promise> >a : number >b : Promise diff --git a/tsc/testdata/baselines/reference/conformance/mappedTypesGenericTuples.types b/tsc/testdata/baselines/reference/conformance/mappedTypesGenericTuples.types index 663619004d5b9..cb053e1c103e8 100644 --- a/tsc/testdata/baselines/reference/conformance/mappedTypesGenericTuples.types +++ b/tsc/testdata/baselines/reference/conformance/mappedTypesGenericTuples.types @@ -10,16 +10,16 @@ type M = { [P in keyof T]: T[P] }; >M : M type KA = K<[string, string, boolean]>; // ["0", "1", "2"] ->KA : ["0", "1", "2"] +>KA : KA type KB = K<[string, string, ...string[], string]>; // ["0", "1", ...number[], number] ->KB : ["0", "1", ...number[], number] +>KB : KB type KC = K<[...string[]]>; // number[] ->KC : number[] +>KC : KC type KD = K; // number[] ->KD : number[] +>KD : KD type A = { a: string }; >A : A @@ -61,10 +61,10 @@ type Keys = { [K in keyof O]: K }; >Keys : Keys type Keys1 = Keys<[string, ...string[]]>; ->Keys1 : ["0", ...number[]] +>Keys1 : Keys1 type Keys2 = Keys<[string, ...string[], number]>; ->Keys2 : ["0", ...number[], number] +>Keys2 : Keys2 // Repro from #56888 @@ -86,5 +86,5 @@ type R1 = readonly [...unknown[], T]; // readonly [...unknown[], T] >R1 : R1 type R2 = Readonly<[...unknown[], T]>; // readonly [...unknown[], T] ->R2 : readonly [...unknown[], T] +>R2 : R2 diff --git a/tsc/testdata/baselines/reference/conformance/newTarget.es5(target=es2015).types b/tsc/testdata/baselines/reference/conformance/newTarget.es5(target=es2015).types index 753961cb1008f..07753c9be64ec 100644 --- a/tsc/testdata/baselines/reference/conformance/newTarget.es5(target=es2015).types +++ b/tsc/testdata/baselines/reference/conformance/newTarget.es5(target=es2015).types @@ -83,8 +83,8 @@ const f2 = function () { } const O = { ->O : { k: () => () => any; } ->{ k: function () { return new.target; }} : { k: () => () => any; } +>O : { k: () => any; } +>{ k: function () { return new.target; }} : { k: () => any; } k: function () { return new.target; } >k : () => any diff --git a/tsc/testdata/baselines/reference/conformance/newTarget.es6.types b/tsc/testdata/baselines/reference/conformance/newTarget.es6.types index 17a9fbbbc2cce..19035490386f6 100644 --- a/tsc/testdata/baselines/reference/conformance/newTarget.es6.types +++ b/tsc/testdata/baselines/reference/conformance/newTarget.es6.types @@ -83,8 +83,8 @@ const f2 = function () { } const O = { ->O : { k: () => () => any; } ->{ k: function () { return new.target; }} : { k: () => () => any; } +>O : { k: () => any; } +>{ k: function () { return new.target; }} : { k: () => any; } k: function () { return new.target; } >k : () => any diff --git a/tsc/testdata/baselines/reference/conformance/partiallyNamedTuples.types b/tsc/testdata/baselines/reference/conformance/partiallyNamedTuples.types index 226eda20ccab9..9370a4e58a356 100644 --- a/tsc/testdata/baselines/reference/conformance/partiallyNamedTuples.types +++ b/tsc/testdata/baselines/reference/conformance/partiallyNamedTuples.types @@ -37,13 +37,13 @@ type ToAnonymousTuple = { }; type AnonymousToAnonymous = ToAnonymousTuple<[boolean, number]>; ->AnonymousToAnonymous : [["0", boolean, keyof [boolean, number], [boolean, number]], ["1", number, keyof [boolean, number], [boolean, number]]] +>AnonymousToAnonymous : AnonymousToAnonymous type MixedToAnonymous = ToAnonymousTuple<[boolean, second: number]>; ->MixedToAnonymous : [["0", boolean, keyof [boolean, second: number], [boolean, second: number]], second: ["1", number, keyof [boolean, second: number], [boolean, second: number]]] +>MixedToAnonymous : MixedToAnonymous type NamedToAnonymous = ToAnonymousTuple<[first: boolean, second: number]>; ->NamedToAnonymous : [first: ["0", boolean, keyof [first: boolean, second: number], [first: boolean, second: number]], second: ["1", number, keyof [first: boolean, second: number], [first: boolean, second: number]]] +>NamedToAnonymous : NamedToAnonymous type ToMixedTuple = { >ToMixedTuple : ToMixedTuple @@ -52,13 +52,13 @@ type ToMixedTuple = { }; type AnonymousToMixed = ToMixedTuple<[boolean, number]>; ->AnonymousToMixed : [["0", second: boolean, keyof [boolean, number], fourth: [boolean, number]], ["1", second: number, keyof [boolean, number], fourth: [boolean, number]]] +>AnonymousToMixed : AnonymousToMixed type MixedToMixed = ToMixedTuple<[boolean, second: number]>; ->MixedToMixed : [["0", second: boolean, keyof [boolean, second: number], fourth: [boolean, second: number]], second: ["1", second: number, keyof [boolean, second: number], fourth: [boolean, second: number]]] +>MixedToMixed : MixedToMixed type NamedToMixed = ToMixedTuple<[first: boolean, second: number]>; ->NamedToMixed : [first: ["0", second: boolean, keyof [first: boolean, second: number], fourth: [first: boolean, second: number]], second: ["1", second: number, keyof [first: boolean, second: number], fourth: [first: boolean, second: number]]] +>NamedToMixed : NamedToMixed type MixedSpread = [first: boolean, ...[second: string]]; >MixedSpread : [first: boolean, second: string] diff --git a/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt b/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt index 2d62cc6d80ce3..0bb8b282a5b99 100644 --- a/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt +++ b/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.errors.txt @@ -4,7 +4,9 @@ recursiveMappedTypes.ts(7,6): error TS2456: Type alias 'Recurse1' circularly ref recursiveMappedTypes.ts(8,11): error TS2313: Type parameter 'K' has a circular constraint. recursiveMappedTypes.ts(11,6): error TS2456: Type alias 'Recurse2' circularly references itself. recursiveMappedTypes.ts(12,11): error TS2313: Type parameter 'K' has a circular constraint. -recursiveMappedTypes.ts(20,19): error TS2589: Type instantiation is excessively deep and possibly infinite. +recursiveMappedTypes.ts(21,3): error TS2322: Type 'Circular' is not assignable to type 'tup'. + Type at position 0 in source is not compatible with type at position 0 in target. + Type 'Circular' is not assignable to type 'number'. recursiveMappedTypes.ts(73,5): error TS2502: '"each"' is referenced directly or indirectly in its own type annotation. recursiveMappedTypes.ts(79,1): error TS2615: Type of property '"each"' circularly references itself in mapped type '{ [P in keyof ListWidget]: undefined extends ListWidget[P] ? never : P; }'. @@ -43,9 +45,11 @@ recursiveMappedTypes.ts(79,1): error TS2615: Type of property '"each"' circularl type tup = [number, number, number, number]; function foo(arg: Circular): tup { - ~~~~~~~~~~~~~ -!!! error TS2589: Type instantiation is excessively deep and possibly infinite. return arg; + ~~~~~~ +!!! error TS2322: Type 'Circular' is not assignable to type 'tup'. +!!! error TS2322: Type at position 0 in source is not compatible with type at position 0 in target. +!!! error TS2322: Type 'Circular' is not assignable to type 'number'. } // Repro from #29442 diff --git a/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.types b/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.types index 0aa3180e17158..cfbd1be8c5464 100644 --- a/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.types +++ b/tsc/testdata/baselines/reference/conformance/recursiveMappedTypes.types @@ -31,10 +31,10 @@ type tup = [number, number, number, number]; function foo(arg: Circular): tup { >foo : (arg: Circular) => tup ->arg : any +>arg : Circular return arg; ->arg : any +>arg : Circular } // Repro from #29442 @@ -52,10 +52,10 @@ type arr = string[][]; >arr : arr type t1 = DeepMap; // [number, [number, [number]]] ->t1 : [number, [number, [number]]] +>t1 : t1 type t2 = DeepMap; // number[][] ->t2 : number[][] +>t2 : t2 // Repro from #29577 @@ -81,9 +81,9 @@ declare var product: Transform; >product : Transform product.users; // (Transform | Transform)[] ->product.users : Transform[] +>product.users : Transform<(Guest | User)[]> >product : Transform ->users : Transform[] +>users : Transform<(Guest | User)[]> // Repro from #29702 @@ -94,10 +94,10 @@ type Remap2 = T extends object ? { [P in keyof T]: Remap2; } : T; >Remap2 : Remap2 type a = Remap1; // string[] ->a : string[] +>a : a type b = Remap2; // string[] ->b : string[] +>b : b // Repro from #29992 diff --git a/tsc/testdata/baselines/reference/conformance/varianceAnnotations.errors.txt b/tsc/testdata/baselines/reference/conformance/varianceAnnotations.errors.txt index c58ce8ee943af..b47254c0503e3 100644 --- a/tsc/testdata/baselines/reference/conformance/varianceAnnotations.errors.txt +++ b/tsc/testdata/baselines/reference/conformance/varianceAnnotations.errors.txt @@ -64,9 +64,10 @@ varianceAnnotations.ts(160,68): error TS2345: Argument of type 'ActionObject<{ t Types of property '_storedEvent' are incompatible. Type '{ type: "PLAY"; value: number; } | { type: "RESET"; }' is not assignable to type '{ type: "PLAY"; value: number; }'. Property 'value' is missing in type '{ type: "RESET"; }' but required in type '{ type: "PLAY"; value: number; }'. +varianceAnnotations.ts(170,5): error TS5088: The inferred type of 'OuterC' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -==== varianceAnnotations.ts (31 errors) ==== +==== varianceAnnotations.ts (32 errors) ==== type Covariant = { x: T; } @@ -335,6 +336,8 @@ varianceAnnotations.ts(160,68): error TS2345: Argument of type 'ActionObject<{ t } let OuterC = class C { + ~~~~~~ +!!! error TS5088: The inferred type of 'OuterC' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. foo(): C { return this; } diff --git a/tsc/testdata/baselines/reference/conformance/varianceAnnotations.js b/tsc/testdata/baselines/reference/conformance/varianceAnnotations.js index 95ee45dff82d5..050275ef773ca 100644 --- a/tsc/testdata/baselines/reference/conformance/varianceAnnotations.js +++ b/tsc/testdata/baselines/reference/conformance/varianceAnnotations.js @@ -212,120 +212,3 @@ let OuterC = class C { return this; } }; - - -//// [varianceAnnotations.d.ts] -type Covariant = { - x: T; -}; -declare let super_covariant: Covariant; -declare let sub_covariant: Covariant; -type Contravariant = { - f: (x: T) => void; -}; -declare let super_contravariant: Contravariant; -declare let sub_contravariant: Contravariant; -type Invariant = { - f: (x: T) => T; -}; -declare let super_invariant: Invariant; -declare let sub_invariant: Invariant; -type T10 = T; -type T11 = keyof T; -type T12 = T[K]; -type T13 = T[keyof T]; -type Covariant1 = { - x: T; -}; -type Contravariant1 = keyof T; -type Contravariant2 = { - f: (x: T) => void; -}; -type Invariant1 = { - f: (x: T) => T; -}; -type Invariant2 = { - f: (x: T) => T; -}; -type Foo1 = { - x: T; - f: FooFn1; -}; -type FooFn1 = (foo: Bar1) => void; -type Bar1 = { - value: Foo1; -}; -type Foo2 = { - x: T; - f: FooFn2; -}; -type FooFn2 = (foo: Bar2) => void; -type Bar2 = { - value: Foo2; -}; -type Foo3 = { - x: T; - f: FooFn3; -}; -type FooFn3 = (foo: Bar3) => void; -type Bar3 = { - value: Foo3; -}; -type T20 = T; -type T21 = T; -type T22 = T; -type T23 = T; -declare function f1(x: T): void; -declare function f2(): T; -declare class C { - in a: number; - out b: number; -} -interface Baz { -} -interface Baz { -} -declare let baz1: Baz; -declare let baz2: Baz; -interface Parent { - child: Child | null; - parent: Parent | null; -} -interface Child extends Parent { - readonly a: A; - readonly b: B; -} -declare function fn(inp: Child): void; -declare const pu: Parent; -declare const notString: Parent; -declare class StateNode { - _storedEvent: TEvent; - _action: ActionObject; - _state: StateNode; -} -interface ActionObject { - exec: (meta: StateNode) => void; -} -declare function createMachine(action: ActionObject): StateNode; -declare function interpret(machine: StateNode): void; -declare const machine: StateNode; -declare const qq: ActionObject<{ - type: "PLAY"; - value: number; -}>; -declare let Anon: { - new (): { - foo(): InstanceType<(typeof Anon)>; - }; -}; -declare let OuterC: { - new (): { - foo(): /*elided*/ any; - }; -}; diff --git a/tsc/testdata/baselines/reference/fourslash/quickInfo/reverseMappedDeclarationQuickInfo.baseline b/tsc/testdata/baselines/reference/fourslash/quickInfo/reverseMappedDeclarationQuickInfo.baseline new file mode 100644 index 0000000000000..5641a76a192b2 --- /dev/null +++ b/tsc/testdata/baselines/reference/fourslash/quickInfo/reverseMappedDeclarationQuickInfo.baseline @@ -0,0 +1,166 @@ +// === QuickInfo === +=== /reverseMappedDeclarationQuickInfo.ts === +// +// declare function unwrap(input: { [K in keyof T]: { value: T[K] } }): T; +// declare const input: { [key: string]: { value: string } }; +// const indexed = unwrap(input); +// ^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const indexed: { +// | [x: string]: ...; +// | } +// | ``` +// | +// | ---------------------------------------------------------------------- +// indexed["name"].charAt(0); +// ^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | (method) String.charAt(pos: number): string +// | ``` +// | Returns the character at the specified index. +// | +// | *@param* `pos` — The zero-based index of the desired character. +// | ---------------------------------------------------------------------- +// +// type Validator = ((input: unknown) => T | undefined) | { +// [K in keyof T]: Validator; +// }; +// declare function decode(input: { [K in keyof T]: Validator }): T; +// declare const stringValidator: (input: unknown) => string | undefined; +// const deep = decode({ a: { b: { c: { d: stringValidator } } } }); +// ^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const deep: { +// | a: { +// | b: { +// | c: { +// | d: ...; +// | }; +// | }; +// | }; +// | } +// | ``` +// | +// | ---------------------------------------------------------------------- +// deep.a.b.c.d; +// ^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | (property) d: string +// | ``` +// | +// | ---------------------------------------------------------------------- +// +[ + { + "marker": { + "Position": 141, + "LSPosition": { + "line": 3, + "character": 6 + }, + "Name": "index", + "Data": {} + }, + "item": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst indexed: {\n [x: string]: ...;\n}\n```\n" + }, + "range": { + "start": { + "line": 3, + "character": 6 + }, + "end": { + "line": 3, + "character": 13 + } + } + } + }, + { + "marker": { + "Position": 188, + "LSPosition": { + "line": 4, + "character": 22 + }, + "Name": "member", + "Data": {} + }, + "item": { + "contents": { + "kind": "markdown", + "value": "```typescript\n(method) String.charAt(pos: number): string\n```\nReturns the character at the specified index.\n\n*@param* `pos` — The zero-based index of the desired character." + }, + "range": { + "start": { + "line": 4, + "character": 16 + }, + "end": { + "line": 4, + "character": 22 + } + } + } + }, + { + "marker": { + "Position": 446, + "LSPosition": { + "line": 11, + "character": 6 + }, + "Name": "deep", + "Data": {} + }, + "item": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst deep: {\n a: {\n b: {\n c: {\n d: ...;\n };\n };\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 11, + "character": 6 + }, + "end": { + "line": 11, + "character": 10 + } + } + } + }, + { + "marker": { + "Position": 517, + "LSPosition": { + "line": 12, + "character": 11 + }, + "Name": "leaf", + "Data": {} + }, + "item": { + "contents": { + "kind": "markdown", + "value": "```typescript\n(property) d: string\n```\n" + }, + "range": { + "start": { + "line": 12, + "character": 11 + }, + "end": { + "line": 12, + "character": 12 + } + } + } + } +] \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js b/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js new file mode 100644 index 0000000000000..51f2739ecd563 --- /dev/null +++ b/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js @@ -0,0 +1,322 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: +//// [/home/src/workspaces/project/consumer/index.ts] *new* +import { arrow, expression, first, generic } from "../producer/dist/index.js"; +const a: typeof arrow = arrow()()(); +const b: typeof expression = expression()()(); +const c: typeof first = first()()(); +const d: typeof generic = generic(1)("text")(true); +type IsAny = 0 extends (1 & T) ? true : false; +const result = arrow()()(); +const notAny: false = null as unknown as IsAny; +const invalid: number = arrow()()(); +const invalidExpression: number = expression()()(); +//// [/home/src/workspaces/project/consumer/tsconfig.json] *new* +{ + "compilerOptions": { "strict": true, "noEmit": true }, + "references": [{ "path": "../producer" }] + } +//// [/home/src/workspaces/project/producer/index.ts] *new* +export const arrow = () => arrow; +export const expression = function self() { return self; }; +export const first = () => second; +export const second = () => first; +export const generic = (value: T) => generic; +//// [/home/src/workspaces/project/producer/tsconfig.json] *new* +{ + "compilerOptions": { "strict": true, "composite": true, "outDir": "dist" } + } + +tsgo --build consumer +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +consumer/index.ts:9:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. + +9 const invalid: number = arrow()()(); +   ~~~~~~~ + +consumer/index.ts:10:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. + +10 const invalidExpression: number = expression()()(); +   ~~~~~~~~~~~~~~~~~ + + +Found 2 errors in the same file, starting at: consumer/index.ts:9 + +//// [/home/src/tslibs/TS/Lib/lib.es2025.full.d.ts] *Lib* +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +interface SymbolConstructor { + (desc?: string | number): symbol; + for(name: string): symbol; + readonly toStringTag: symbol; +} +declare var Symbol: SymbolConstructor; +interface Symbol { + readonly [Symbol.toStringTag]: string; +} +declare const console: { log(msg: any): void; }; +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":["./index.ts"],"semanticErrors":true} +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./index.ts" + ], + "original": "./index.ts" + } + ], + "size": 71, + "semanticErrors": true +} +//// [/home/src/workspaces/project/producer/dist/index.d.ts] *new* +export declare const arrow: () => typeof arrow; +export declare const expression: () => typeof expression; +export declare const first: () => typeof second; +export declare const second: () => typeof first; +export declare const generic: (value: T) => typeof generic; + +//// [/home/src/workspaces/project/producer/dist/index.js] *new* +export const arrow = () => arrow; +export const expression = function self() { return self; }; +export const first = () => second; +export const second = () => first; +export const generic = (value) => generic; + +//// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9088ac80180a8a97094330bdf300e155-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;","signature":"616f12ff6b22d59d18c699da7c6242be-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./","strict":true},"latestChangedDtsFile":"./index.d.ts"} +//// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../index.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "../index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../index.ts", + "version": "9088ac80180a8a97094330bdf300e155-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;", + "signature": "616f12ff6b22d59d18c699da7c6242be-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "9088ac80180a8a97094330bdf300e155-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;", + "signature": "616f12ff6b22d59d18c699da7c6242be-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "outDir": "./", + "strict": true + }, + "latestChangedDtsFile": "./index.d.ts", + "size": 1574 +} + +producer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/producer/index.ts +Signatures:: +(stored at emit) /home/src/workspaces/project/producer/index.ts + +consumer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/index.d.ts +*refresh* /home/src/workspaces/project/consumer/index.ts +Signatures:: + + +Edit [0]:: no change + +tsgo --build consumer +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +consumer/index.ts:9:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. + +9 const invalid: number = arrow()()(); +   ~~~~~~~ + +consumer/index.ts:10:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. + +10 const invalidExpression: number = expression()()(); +   ~~~~~~~~~~~~~~~~~ + + +Found 2 errors in the same file, starting at: consumer/index.ts:9 + +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* + +consumer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/index.d.ts +*refresh* /home/src/workspaces/project/consumer/index.ts +Signatures:: + + +Edit [1]:: add a comment to the producer +//// [/home/src/workspaces/project/producer/index.ts] *modified* +export const arrow = () => arrow; +export const expression = function self() { return self; }; +export const first = () => second; +export const second = () => first; +export const generic = (value: T) => generic; +// comment-only edit + + +tsgo --build consumer +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +consumer/index.ts:9:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. + +9 const invalid: number = arrow()()(); +   ~~~~~~~ + +consumer/index.ts:10:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. + +10 const invalidExpression: number = expression()()(); +   ~~~~~~~~~~~~~~~~~ + + +Found 2 errors in the same file, starting at: consumer/index.ts:9 + +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* +//// [/home/src/workspaces/project/producer/dist/index.js] *modified* +export const arrow = () => arrow; +export const expression = function self() { return self; }; +export const first = () => second; +export const second = () => first; +export const generic = (value) => generic; +// comment-only edit + +//// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1518eacddeda8b529b863685f5a73bfd-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\n// comment-only edit\n","signature":"616f12ff6b22d59d18c699da7c6242be-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./","strict":true},"latestChangedDtsFile":"./index.d.ts"} +//// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../index.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "../index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../index.ts", + "version": "1518eacddeda8b529b863685f5a73bfd-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\n// comment-only edit\n", + "signature": "616f12ff6b22d59d18c699da7c6242be-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "1518eacddeda8b529b863685f5a73bfd-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\n// comment-only edit\n", + "signature": "616f12ff6b22d59d18c699da7c6242be-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "outDir": "./", + "strict": true + }, + "latestChangedDtsFile": "./index.d.ts", + "size": 1598 +} + +producer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/producer/index.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/producer/index.ts + +consumer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/index.d.ts +*refresh* /home/src/workspaces/project/consumer/index.ts +Signatures:: + + +Edit [2]:: no change + +tsgo --build consumer +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +consumer/index.ts:9:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. + +9 const invalid: number = arrow()()(); +   ~~~~~~~ + +consumer/index.ts:10:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. + +10 const invalidExpression: number = expression()()(); +   ~~~~~~~~~~~~~~~~~ + + +Found 2 errors in the same file, starting at: consumer/index.ts:9 + +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* + +consumer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/index.d.ts +*refresh* /home/src/workspaces/project/consumer/index.ts +Signatures:: diff --git a/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-mapped-declaration-consumption.js b/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-mapped-declaration-consumption.js new file mode 100644 index 0000000000000..0a75ad7a4aa40 --- /dev/null +++ b/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-mapped-declaration-consumption.js @@ -0,0 +1,300 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: +//// [/home/src/tslibs/TS/Lib/lib.es2025.full.d.ts] *new* +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray { readonly length: number; readonly [n: number]: T; } +interface SymbolConstructor { + (desc?: string | number): symbol; + for(name: string): symbol; + readonly toStringTag: symbol; +} +declare var Symbol: SymbolConstructor; +interface Symbol { + readonly [Symbol.toStringTag]: string; +} +declare const console: { log(msg: any): void; }; +//// [/home/src/workspaces/project/consumer/index.ts] *new* +import { value, tuple, nested, replaced } from "../producer/dist/index.js"; +value.items[0] = ["ok"]; +value.items[0] = 123; +if (typeof value.items[0] !== "string") { + value.items[0][0] = 123; +} +const number: number = tuple[0]; +tuple[0][0] = 123; +nested[0] = ["ok"]; +nested[0] = 123; +if (typeof nested[0] !== "string") { + nested[0][0] = 123; +} +replaced[0] = [123]; +replaced[0] = "error"; +if (typeof replaced[0] !== "number") { + replaced[0][0] = "error"; +} +//// [/home/src/workspaces/project/consumer/tsconfig.json] *new* +{ + "compilerOptions": { "strict": true, "noEmit": true }, + "references": [{ "path": "../producer" }] + } +//// [/home/src/workspaces/project/producer/index.ts] *new* +type Json = string | Json[]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: [] as Json[] }); + +type Circular = { [P in keyof T]: Circular }; +declare const circular: Circular<[number, number]>; +export const tuple = circular; + +type Tuple = string | [Tuple]; +export const nested = wrap(null as unknown as [Tuple]); + +type Replace = T extends object ? { [K in keyof T]: Replace } : R; +declare function replace(value: T): Replace; +export const replaced = replace([] as Json[]); +//// [/home/src/workspaces/project/producer/private.ts] *new* +export function local() { + type Circular = { [K in keyof T]: Circular }; + return null as unknown as Circular<[number]>; +} +export function anonymous() { + type Circular = T extends object ? { [K in keyof T]: Circular<[number]> } : T; + return null as unknown as Circular<[number]>; +} +//// [/home/src/workspaces/project/producer/tsconfig.json] *new* +{ + "compilerOptions": { "strict": true, "composite": true, "outDir": "dist" }, + "files": ["index.ts", "private.ts"] + } + +tsgo --build consumer +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +producer/private.ts:1:17 - error TS5088: The inferred type of 'local' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +1 export function local() { +   ~~~~~ + +producer/private.ts:5:17 - error TS5088: The inferred type of 'anonymous' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +5 export function anonymous() { +   ~~~~~~~~~ + +consumer/index.ts:3:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed'. + +3 value.items[0] = 123; +  ~~~~~~~~~~~~~~ + +consumer/index.ts:5:5 - error TS2322: Type 'number' is not assignable to type 'string | Parsed'. + +5 value.items[0][0] = 123; +   ~~~~~~~~~~~~~~~~~ + +consumer/index.ts:7:7 - error TS2322: Type '[Circular<[number, number]>, Circular<[number, number]>]' is not assignable to type 'number'. + +7 const number: number = tuple[0]; +   ~~~~~~ + +consumer/index.ts:8:1 - error TS2322: Type 'number' is not assignable to type '[Circular<[number, number]>, Circular<[number, number]>]'. + +8 tuple[0][0] = 123; +  ~~~~~~~~~~~ + +consumer/index.ts:10:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed<[Tuple]>'. + +10 nested[0] = 123; +  ~~~~~~~~~ + +consumer/index.ts:12:5 - error TS2322: Type 'number' is not assignable to type 'string | Parsed<[Tuple]>'. + +12 nested[0][0] = 123; +   ~~~~~~~~~~~~ + +consumer/index.ts:15:1 - error TS2322: Type 'string' is not assignable to type 'number | Replace'. + +15 replaced[0] = "error"; +  ~~~~~~~~~~~ + +consumer/index.ts:17:5 - error TS2322: Type 'string' is not assignable to type 'number | Replace'. + +17 replaced[0][0] = "error"; +   ~~~~~~~~~~~~~~ + + +Found 10 errors in 2 files. + +Errors Files + 8 consumer/index.ts:3 + 2 producer/private.ts:1 + +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":["./index.ts"],"semanticErrors":true} +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./index.ts" + ], + "original": "./index.ts" + } + ], + "size": 71, + "semanticErrors": true +} +//// [/home/src/workspaces/project/producer/dist/index.d.ts] *new* +type Json = string | Json[]; +type Parsed = T extends object ? { + [K in keyof T]: Parsed; +} : T; +export declare const value: { + items: Parsed; +}; +type Circular = { + [P in keyof T]: Circular; +}; +export declare const tuple: Circular<[number, number]>; +type Tuple = string | [Tuple]; +export declare const nested: Parsed<[Tuple]>; +type Replace = T extends object ? { + [K in keyof T]: Replace; +} : R; +export declare const replaced: Replace; +export {}; + +//// [/home/src/workspaces/project/producer/dist/index.js] *new* +export const value = wrap({ items: [] }); +export const tuple = circular; +export const nested = wrap(null); +export const replaced = replace([]); + +//// [/home/src/workspaces/project/producer/dist/private.js] *new* +export function local() { + return null; +} +export function anonymous() { + return null; +} + +//// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2025.full.d.ts","../index.ts","../private.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ee3e8800eb4e45998a629f3cc7a195ab-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n\ntype Circular = { [P in keyof T]: Circular };\ndeclare const circular: Circular<[number, number]>;\nexport const tuple = circular;\n\ntype Tuple = string | [Tuple];\nexport const nested = wrap(null as unknown as [Tuple]);\n\ntype Replace = T extends object ? { [K in keyof T]: Replace } : R;\ndeclare function replace(value: T): Replace;\nexport const replaced = replace([] as Json[]);","signature":"c519a80fea806bd865bc994a4b374b72-type Json = string | Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\ntype Circular = {\n [P in keyof T]: Circular;\n};\nexport declare const tuple: Circular<[number, number]>;\ntype Tuple = string | [Tuple];\nexport declare const nested: Parsed<[Tuple]>;\ntype Replace = T extends object ? {\n [K in keyof T]: Replace;\n} : R;\nexport declare const replaced: Replace;\nexport {};\n","impliedNodeFormat":1},"3d0559a853159cce0f535e03084e7636-export function local() {\n type Circular = { [K in keyof T]: Circular };\n return null as unknown as Circular<[number]>;\n}\nexport function anonymous() {\n type Circular = T extends object ? { [K in keyof T]: Circular<[number]> } : T;\n return null as unknown as Circular<[number]>;\n}"],"options":{"composite":true,"outDir":"./","strict":true},"emitDiagnosticsPerFile":[[3,[{"pos":16,"end":21,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["local"]},{"pos":150,"end":159,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["anonymous"]}]]],"latestChangedDtsFile":"./index.d.ts","emitSignatures":[3]} +//// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../index.ts", + "../private.ts" + ], + "original": [ + 2, + 3 + ] + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "../index.ts", + "../private.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../index.ts", + "version": "ee3e8800eb4e45998a629f3cc7a195ab-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n\ntype Circular = { [P in keyof T]: Circular };\ndeclare const circular: Circular<[number, number]>;\nexport const tuple = circular;\n\ntype Tuple = string | [Tuple];\nexport const nested = wrap(null as unknown as [Tuple]);\n\ntype Replace = T extends object ? { [K in keyof T]: Replace } : R;\ndeclare function replace(value: T): Replace;\nexport const replaced = replace([] as Json[]);", + "signature": "c519a80fea806bd865bc994a4b374b72-type Json = string | Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\ntype Circular = {\n [P in keyof T]: Circular;\n};\nexport declare const tuple: Circular<[number, number]>;\ntype Tuple = string | [Tuple];\nexport declare const nested: Parsed<[Tuple]>;\ntype Replace = T extends object ? {\n [K in keyof T]: Replace;\n} : R;\nexport declare const replaced: Replace;\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "ee3e8800eb4e45998a629f3cc7a195ab-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n\ntype Circular = { [P in keyof T]: Circular };\ndeclare const circular: Circular<[number, number]>;\nexport const tuple = circular;\n\ntype Tuple = string | [Tuple];\nexport const nested = wrap(null as unknown as [Tuple]);\n\ntype Replace = T extends object ? { [K in keyof T]: Replace } : R;\ndeclare function replace(value: T): Replace;\nexport const replaced = replace([] as Json[]);", + "signature": "c519a80fea806bd865bc994a4b374b72-type Json = string | Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\ntype Circular = {\n [P in keyof T]: Circular;\n};\nexport declare const tuple: Circular<[number, number]>;\ntype Tuple = string | [Tuple];\nexport declare const nested: Parsed<[Tuple]>;\ntype Replace = T extends object ? {\n [K in keyof T]: Replace;\n} : R;\nexport declare const replaced: Replace;\nexport {};\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../private.ts", + "version": "3d0559a853159cce0f535e03084e7636-export function local() {\n type Circular = { [K in keyof T]: Circular };\n return null as unknown as Circular<[number]>;\n}\nexport function anonymous() {\n type Circular = T extends object ? { [K in keyof T]: Circular<[number]> } : T;\n return null as unknown as Circular<[number]>;\n}", + "signature": "3d0559a853159cce0f535e03084e7636-export function local() {\n type Circular = { [K in keyof T]: Circular };\n return null as unknown as Circular<[number]>;\n}\nexport function anonymous() {\n type Circular = T extends object ? { [K in keyof T]: Circular<[number]> } : T;\n return null as unknown as Circular<[number]>;\n}", + "impliedNodeFormat": "CommonJS" + } + ], + "options": { + "composite": true, + "outDir": "./", + "strict": true + }, + "emitDiagnosticsPerFile": [ + [ + "../private.ts", + [ + { + "pos": 16, + "end": 21, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "local" + ] + }, + { + "pos": 150, + "end": 159, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "anonymous" + ] + } + ] + ] + ], + "latestChangedDtsFile": "./index.d.ts", + "emitSignatures": [ + { + "file": "../private.ts", + "original": 3 + } + ], + "size": 3099 +} + +producer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/producer/index.ts +*refresh* /home/src/workspaces/project/producer/private.ts +Signatures:: +(stored at emit) /home/src/workspaces/project/producer/index.ts + +consumer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/index.d.ts +*refresh* /home/src/workspaces/project/consumer/index.ts +Signatures:: diff --git a/tsc/testdata/baselines/reference/tsbuild/incremental/reverse-mapped-declaration-consumption.js b/tsc/testdata/baselines/reference/tsbuild/incremental/reverse-mapped-declaration-consumption.js new file mode 100644 index 0000000000000..dfed8c14fc7db --- /dev/null +++ b/tsc/testdata/baselines/reference/tsbuild/incremental/reverse-mapped-declaration-consumption.js @@ -0,0 +1,364 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: +//// [/home/src/workspaces/project/consumer/index.ts] *new* +import { indexed, deep, named } from "../producer/dist/index.js"; +const a: string = indexed["name"]; +const b: string = deep.a.b.c.d; +const c: string = named.node.leaf; +type IsAny = 0 extends (1 & T) ? true : false; +const notAny: false = null as unknown as + IsAny; +const invalidIndex: number = indexed["name"]; +const invalidDeep: number = deep.a.b.c.d; +const invalidNamed: number = named.node.leaf; +//// [/home/src/workspaces/project/consumer/tsconfig.json] *new* +{ + "compilerOptions": { "strict": true, "noEmit": true }, + "references": [{ "path": "../producer" }] + } +//// [/home/src/workspaces/project/producer/index.ts] *new* +declare function unwrap(input: { [K in keyof T]: { value: T[K] } }): T; +declare const indexedInput: { [key: string]: { value: string } }; +export const indexed = unwrap(indexedInput); +type Validator = ((input: unknown) => T | undefined) | { + [K in keyof T]: Validator; +}; +declare function decode(input: { [K in keyof T]: Validator }): T; +declare const stringValidator: (input: unknown) => string | undefined; +export const deep = decode({ a: { b: { c: { d: stringValidator } } } }); +interface NamedInput { leaf: typeof stringValidator } +declare const namedInput: { node: NamedInput }; +export const named = decode(namedInput); +//// [/home/src/workspaces/project/producer/tsconfig.json] *new* +{ + "compilerOptions": { "strict": true, "composite": true, "outDir": "dist" } + } + +tsgo --build consumer +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +consumer/index.ts:8:7 - error TS2322: Type 'string' is not assignable to type 'number'. + +8 const invalidIndex: number = indexed["name"]; +   ~~~~~~~~~~~~ + +consumer/index.ts:9:7 - error TS2322: Type 'string' is not assignable to type 'number'. + +9 const invalidDeep: number = deep.a.b.c.d; +   ~~~~~~~~~~~ + +consumer/index.ts:10:7 - error TS2322: Type 'string' is not assignable to type 'number'. + +10 const invalidNamed: number = named.node.leaf; +   ~~~~~~~~~~~~ + + +Found 3 errors in the same file, starting at: consumer/index.ts:8 + +//// [/home/src/tslibs/TS/Lib/lib.es2025.full.d.ts] *Lib* +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +interface SymbolConstructor { + (desc?: string | number): symbol; + for(name: string): symbol; + readonly toStringTag: symbol; +} +declare var Symbol: SymbolConstructor; +interface Symbol { + readonly [Symbol.toStringTag]: string; +} +declare const console: { log(msg: any): void; }; +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":["./index.ts"],"semanticErrors":true} +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./index.ts" + ], + "original": "./index.ts" + } + ], + "size": 71, + "semanticErrors": true +} +//// [/home/src/workspaces/project/producer/dist/index.d.ts] *new* +export declare const indexed: { + [x: string]: string; +}; +export declare const deep: { + a: { + b: { + c: { + d: string; + }; + }; + }; +}; +export declare const named: { + node: { + leaf: string; + }; +}; + +//// [/home/src/workspaces/project/producer/dist/index.js] *new* +export const indexed = unwrap(indexedInput); +export const deep = decode({ a: { b: { c: { d: stringValidator } } } }); +export const named = decode(namedInput); + +//// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6f4074b2f28fc7614cd7f712938fd82f-declare function unwrap(input: { [K in keyof T]: { value: T[K] } }): T;\ndeclare const indexedInput: { [key: string]: { value: string } };\nexport const indexed = unwrap(indexedInput);\ntype Validator = ((input: unknown) => T | undefined) | {\n [K in keyof T]: Validator;\n};\ndeclare function decode(input: { [K in keyof T]: Validator }): T;\ndeclare const stringValidator: (input: unknown) => string | undefined;\nexport const deep = decode({ a: { b: { c: { d: stringValidator } } } });\ninterface NamedInput { leaf: typeof stringValidator }\ndeclare const namedInput: { node: NamedInput };\nexport const named = decode(namedInput);","signature":"39ea880b65ae57c83c7fd5b8a0ea6ebb-export declare const indexed: {\n [x: string]: string;\n};\nexport declare const deep: {\n a: {\n b: {\n c: {\n d: string;\n };\n };\n };\n};\nexport declare const named: {\n node: {\n leaf: string;\n };\n};\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./","strict":true},"latestChangedDtsFile":"./index.d.ts"} +//// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../index.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "../index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../index.ts", + "version": "6f4074b2f28fc7614cd7f712938fd82f-declare function unwrap(input: { [K in keyof T]: { value: T[K] } }): T;\ndeclare const indexedInput: { [key: string]: { value: string } };\nexport const indexed = unwrap(indexedInput);\ntype Validator = ((input: unknown) => T | undefined) | {\n [K in keyof T]: Validator;\n};\ndeclare function decode(input: { [K in keyof T]: Validator }): T;\ndeclare const stringValidator: (input: unknown) => string | undefined;\nexport const deep = decode({ a: { b: { c: { d: stringValidator } } } });\ninterface NamedInput { leaf: typeof stringValidator }\ndeclare const namedInput: { node: NamedInput };\nexport const named = decode(namedInput);", + "signature": "39ea880b65ae57c83c7fd5b8a0ea6ebb-export declare const indexed: {\n [x: string]: string;\n};\nexport declare const deep: {\n a: {\n b: {\n c: {\n d: string;\n };\n };\n };\n};\nexport declare const named: {\n node: {\n leaf: string;\n };\n};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "6f4074b2f28fc7614cd7f712938fd82f-declare function unwrap(input: { [K in keyof T]: { value: T[K] } }): T;\ndeclare const indexedInput: { [key: string]: { value: string } };\nexport const indexed = unwrap(indexedInput);\ntype Validator = ((input: unknown) => T | undefined) | {\n [K in keyof T]: Validator;\n};\ndeclare function decode(input: { [K in keyof T]: Validator }): T;\ndeclare const stringValidator: (input: unknown) => string | undefined;\nexport const deep = decode({ a: { b: { c: { d: stringValidator } } } });\ninterface NamedInput { leaf: typeof stringValidator }\ndeclare const namedInput: { node: NamedInput };\nexport const named = decode(namedInput);", + "signature": "39ea880b65ae57c83c7fd5b8a0ea6ebb-export declare const indexed: {\n [x: string]: string;\n};\nexport declare const deep: {\n a: {\n b: {\n c: {\n d: string;\n };\n };\n };\n};\nexport declare const named: {\n node: {\n leaf: string;\n };\n};\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "outDir": "./", + "strict": true + }, + "latestChangedDtsFile": "./index.d.ts", + "size": 2026 +} + +producer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/producer/index.ts +Signatures:: +(stored at emit) /home/src/workspaces/project/producer/index.ts + +consumer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/index.d.ts +*refresh* /home/src/workspaces/project/consumer/index.ts +Signatures:: + + +Edit [0]:: no change + +tsgo --build consumer +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +consumer/index.ts:8:7 - error TS2322: Type 'string' is not assignable to type 'number'. + +8 const invalidIndex: number = indexed["name"]; +   ~~~~~~~~~~~~ + +consumer/index.ts:9:7 - error TS2322: Type 'string' is not assignable to type 'number'. + +9 const invalidDeep: number = deep.a.b.c.d; +   ~~~~~~~~~~~ + +consumer/index.ts:10:7 - error TS2322: Type 'string' is not assignable to type 'number'. + +10 const invalidNamed: number = named.node.leaf; +   ~~~~~~~~~~~~ + + +Found 3 errors in the same file, starting at: consumer/index.ts:8 + +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* + +consumer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/index.d.ts +*refresh* /home/src/workspaces/project/consumer/index.ts +Signatures:: + + +Edit [1]:: add a comment to the producer +//// [/home/src/workspaces/project/producer/index.ts] *modified* +declare function unwrap(input: { [K in keyof T]: { value: T[K] } }): T; +declare const indexedInput: { [key: string]: { value: string } }; +export const indexed = unwrap(indexedInput); +type Validator = ((input: unknown) => T | undefined) | { + [K in keyof T]: Validator; +}; +declare function decode(input: { [K in keyof T]: Validator }): T; +declare const stringValidator: (input: unknown) => string | undefined; +export const deep = decode({ a: { b: { c: { d: stringValidator } } } }); +interface NamedInput { leaf: typeof stringValidator } +declare const namedInput: { node: NamedInput }; +export const named = decode(namedInput); +// comment-only edit + + +tsgo --build consumer +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +consumer/index.ts:8:7 - error TS2322: Type 'string' is not assignable to type 'number'. + +8 const invalidIndex: number = indexed["name"]; +   ~~~~~~~~~~~~ + +consumer/index.ts:9:7 - error TS2322: Type 'string' is not assignable to type 'number'. + +9 const invalidDeep: number = deep.a.b.c.d; +   ~~~~~~~~~~~ + +consumer/index.ts:10:7 - error TS2322: Type 'string' is not assignable to type 'number'. + +10 const invalidNamed: number = named.node.leaf; +   ~~~~~~~~~~~~ + + +Found 3 errors in the same file, starting at: consumer/index.ts:8 + +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* +//// [/home/src/workspaces/project/producer/dist/index.js] *modified* +export const indexed = unwrap(indexedInput); +export const deep = decode({ a: { b: { c: { d: stringValidator } } } }); +export const named = decode(namedInput); +// comment-only edit + +//// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7b3972037d74f8acb94c246976ef7ffa-declare function unwrap(input: { [K in keyof T]: { value: T[K] } }): T;\ndeclare const indexedInput: { [key: string]: { value: string } };\nexport const indexed = unwrap(indexedInput);\ntype Validator = ((input: unknown) => T | undefined) | {\n [K in keyof T]: Validator;\n};\ndeclare function decode(input: { [K in keyof T]: Validator }): T;\ndeclare const stringValidator: (input: unknown) => string | undefined;\nexport const deep = decode({ a: { b: { c: { d: stringValidator } } } });\ninterface NamedInput { leaf: typeof stringValidator }\ndeclare const namedInput: { node: NamedInput };\nexport const named = decode(namedInput);\n// comment-only edit\n","signature":"39ea880b65ae57c83c7fd5b8a0ea6ebb-export declare const indexed: {\n [x: string]: string;\n};\nexport declare const deep: {\n a: {\n b: {\n c: {\n d: string;\n };\n };\n };\n};\nexport declare const named: {\n node: {\n leaf: string;\n };\n};\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./","strict":true},"latestChangedDtsFile":"./index.d.ts"} +//// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../index.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "../index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../index.ts", + "version": "7b3972037d74f8acb94c246976ef7ffa-declare function unwrap(input: { [K in keyof T]: { value: T[K] } }): T;\ndeclare const indexedInput: { [key: string]: { value: string } };\nexport const indexed = unwrap(indexedInput);\ntype Validator = ((input: unknown) => T | undefined) | {\n [K in keyof T]: Validator;\n};\ndeclare function decode(input: { [K in keyof T]: Validator }): T;\ndeclare const stringValidator: (input: unknown) => string | undefined;\nexport const deep = decode({ a: { b: { c: { d: stringValidator } } } });\ninterface NamedInput { leaf: typeof stringValidator }\ndeclare const namedInput: { node: NamedInput };\nexport const named = decode(namedInput);\n// comment-only edit\n", + "signature": "39ea880b65ae57c83c7fd5b8a0ea6ebb-export declare const indexed: {\n [x: string]: string;\n};\nexport declare const deep: {\n a: {\n b: {\n c: {\n d: string;\n };\n };\n };\n};\nexport declare const named: {\n node: {\n leaf: string;\n };\n};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "7b3972037d74f8acb94c246976ef7ffa-declare function unwrap(input: { [K in keyof T]: { value: T[K] } }): T;\ndeclare const indexedInput: { [key: string]: { value: string } };\nexport const indexed = unwrap(indexedInput);\ntype Validator = ((input: unknown) => T | undefined) | {\n [K in keyof T]: Validator;\n};\ndeclare function decode(input: { [K in keyof T]: Validator }): T;\ndeclare const stringValidator: (input: unknown) => string | undefined;\nexport const deep = decode({ a: { b: { c: { d: stringValidator } } } });\ninterface NamedInput { leaf: typeof stringValidator }\ndeclare const namedInput: { node: NamedInput };\nexport const named = decode(namedInput);\n// comment-only edit\n", + "signature": "39ea880b65ae57c83c7fd5b8a0ea6ebb-export declare const indexed: {\n [x: string]: string;\n};\nexport declare const deep: {\n a: {\n b: {\n c: {\n d: string;\n };\n };\n };\n};\nexport declare const named: {\n node: {\n leaf: string;\n };\n};\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "outDir": "./", + "strict": true + }, + "latestChangedDtsFile": "./index.d.ts", + "size": 2050 +} + +producer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/producer/index.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/producer/index.ts + +consumer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/index.d.ts +*refresh* /home/src/workspaces/project/consumer/index.ts +Signatures:: + + +Edit [2]:: no change + +tsgo --build consumer +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +consumer/index.ts:8:7 - error TS2322: Type 'string' is not assignable to type 'number'. + +8 const invalidIndex: number = indexed["name"]; +   ~~~~~~~~~~~~ + +consumer/index.ts:9:7 - error TS2322: Type 'string' is not assignable to type 'number'. + +9 const invalidDeep: number = deep.a.b.c.d; +   ~~~~~~~~~~~ + +consumer/index.ts:10:7 - error TS2322: Type 'string' is not assignable to type 'number'. + +10 const invalidNamed: number = named.node.leaf; +   ~~~~~~~~~~~~ + + +Found 3 errors in the same file, starting at: consumer/index.ts:8 + +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* + +consumer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/index.d.ts +*refresh* /home/src/workspaces/project/consumer/index.ts +Signatures:: diff --git a/tsc/testdata/baselines/reference/tsc/incremental/mapped-type-circular-arguments-across-files.js b/tsc/testdata/baselines/reference/tsc/incremental/mapped-type-circular-arguments-across-files.js new file mode 100644 index 0000000000000..bc1d22b5d7733 --- /dev/null +++ b/tsc/testdata/baselines/reference/tsc/incremental/mapped-type-circular-arguments-across-files.js @@ -0,0 +1,486 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: +//// [/home/src/workspaces/project/mapped.ts] *new* +export type M = { [K in keyof T]: T extends M ? 1 : 2 }; +//// [/home/src/workspaces/project/tsconfig.json] *new* +{"compilerOptions": {"strict": true, "noEmit": true, "incremental": true}} +//// [/home/src/workspaces/project/usage.ts] *new* +import type { M } from "./mapped.js"; +declare const array: M; +declare const tuple: M<[string]>; +export const a = array[0]; +export const b = tuple[0]; + +tsgo +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +usage.ts:4:18 - error TS4109: Type arguments for 'Array' circularly reference themselves. + +4 export const a = array[0]; +   ~~~~~~~~ + +usage.ts:5:18 - error TS4110: Tuple type arguments circularly reference themselves. + +5 export const b = tuple[0]; +   ~~~~~~~~ + + +Found 2 errors in the same file, starting at: usage.ts:4 + +//// [/home/src/tslibs/TS/Lib/lib.es2025.full.d.ts] *Lib* +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +interface SymbolConstructor { + (desc?: string | number): symbol; + for(name: string): symbol; + readonly toStringTag: symbol; +} +declare var Symbol: SymbolConstructor; +interface Symbol { + readonly [Symbol.toStringTag]: string; +} +declare const console: { log(msg: any): void; }; +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2025.full.d.ts","./mapped.ts","./usage.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"95de771a1a58514729590dedc4d65577-export type M = { [K in keyof T]: T extends M ? 1 : 2 };","19170e323814c096bf5ea423a0403b2d-import type { M } from \"./mapped.js\";\ndeclare const array: M;\ndeclare const tuple: M<[string]>;\nexport const a = array[0];\nexport const b = tuple[0];"],"fileIdsList":[[2]],"options":{"strict":true},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":123,"end":131,"code":4109,"category":1,"messageKey":"Type_arguments_for_0_circularly_reference_themselves_4109","messageArgs":["Array"]},{"pos":150,"end":158,"code":4110,"category":1,"messageKey":"Tuple_type_arguments_circularly_reference_themselves_4110"}]]],"affectedFilesPendingEmit":[2,3]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./mapped.ts", + "./usage.ts" + ], + "original": [ + 2, + 3 + ] + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./mapped.ts", + "./usage.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./mapped.ts", + "version": "95de771a1a58514729590dedc4d65577-export type M = { [K in keyof T]: T extends M ? 1 : 2 };", + "signature": "95de771a1a58514729590dedc4d65577-export type M = { [K in keyof T]: T extends M ? 1 : 2 };", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./usage.ts", + "version": "19170e323814c096bf5ea423a0403b2d-import type { M } from \"./mapped.js\";\ndeclare const array: M;\ndeclare const tuple: M<[string]>;\nexport const a = array[0];\nexport const b = tuple[0];", + "signature": "19170e323814c096bf5ea423a0403b2d-import type { M } from \"./mapped.js\";\ndeclare const array: M;\ndeclare const tuple: M<[string]>;\nexport const a = array[0];\nexport const b = tuple[0];", + "impliedNodeFormat": "CommonJS" + } + ], + "fileIdsList": [ + [ + "./mapped.ts" + ] + ], + "options": { + "strict": true + }, + "referencedMap": { + "./usage.ts": [ + "./mapped.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + [ + "./usage.ts", + [ + { + "pos": 123, + "end": 131, + "code": 4109, + "category": 1, + "messageKey": "Type_arguments_for_0_circularly_reference_themselves_4109", + "messageArgs": [ + "Array" + ] + }, + { + "pos": 150, + "end": 158, + "code": 4110, + "category": 1, + "messageKey": "Tuple_type_arguments_circularly_reference_themselves_4110" + } + ] + ] + ], + "affectedFilesPendingEmit": [ + [ + "./mapped.ts", + "Js", + 2 + ], + [ + "./usage.ts", + "Js", + 3 + ] + ], + "size": 1593 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/mapped.ts +*refresh* /home/src/workspaces/project/usage.ts +Signatures:: + + +Edit [0]:: edit the use site +//// [/home/src/workspaces/project/usage.ts] *modified* +import type { M } from "./mapped.js"; +declare const array: M; +declare const tuple: M<[string]>; +export const a = array[0]; +export const b = tuple[0]; +// comment-only edit + + +tsgo +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +usage.ts:4:18 - error TS4109: Type arguments for 'Array' circularly reference themselves. + +4 export const a = array[0]; +   ~~~~~~~~ + +usage.ts:5:18 - error TS4110: Tuple type arguments circularly reference themselves. + +5 export const b = tuple[0]; +   ~~~~~~~~ + + +Found 2 errors in the same file, starting at: usage.ts:4 + +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2025.full.d.ts","./mapped.ts","./usage.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"95de771a1a58514729590dedc4d65577-export type M = { [K in keyof T]: T extends M ? 1 : 2 };",{"version":"5091cc0d2d42095ac097c8c2788b840b-import type { M } from \"./mapped.js\";\ndeclare const array: M;\ndeclare const tuple: M<[string]>;\nexport const a = array[0];\nexport const b = tuple[0];\n// comment-only edit\n","signature":"1eca59763ede36c95a8c60156e1278a8-export declare const a: any;\nexport declare const b: any;\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"strict":true},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":123,"end":131,"code":4109,"category":1,"messageKey":"Type_arguments_for_0_circularly_reference_themselves_4109","messageArgs":["Array"]},{"pos":150,"end":158,"code":4110,"category":1,"messageKey":"Tuple_type_arguments_circularly_reference_themselves_4110"}]]],"affectedFilesPendingEmit":[2,3]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./mapped.ts", + "./usage.ts" + ], + "original": [ + 2, + 3 + ] + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./mapped.ts", + "./usage.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./mapped.ts", + "version": "95de771a1a58514729590dedc4d65577-export type M = { [K in keyof T]: T extends M ? 1 : 2 };", + "signature": "95de771a1a58514729590dedc4d65577-export type M = { [K in keyof T]: T extends M ? 1 : 2 };", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./usage.ts", + "version": "5091cc0d2d42095ac097c8c2788b840b-import type { M } from \"./mapped.js\";\ndeclare const array: M;\ndeclare const tuple: M<[string]>;\nexport const a = array[0];\nexport const b = tuple[0];\n// comment-only edit\n", + "signature": "1eca59763ede36c95a8c60156e1278a8-export declare const a: any;\nexport declare const b: any;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "5091cc0d2d42095ac097c8c2788b840b-import type { M } from \"./mapped.js\";\ndeclare const array: M;\ndeclare const tuple: M<[string]>;\nexport const a = array[0];\nexport const b = tuple[0];\n// comment-only edit\n", + "signature": "1eca59763ede36c95a8c60156e1278a8-export declare const a: any;\nexport declare const b: any;\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "./mapped.ts" + ] + ], + "options": { + "strict": true + }, + "referencedMap": { + "./usage.ts": [ + "./mapped.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + [ + "./usage.ts", + [ + { + "pos": 123, + "end": 131, + "code": 4109, + "category": 1, + "messageKey": "Type_arguments_for_0_circularly_reference_themselves_4109", + "messageArgs": [ + "Array" + ] + }, + { + "pos": 150, + "end": 158, + "code": 4110, + "category": 1, + "messageKey": "Tuple_type_arguments_circularly_reference_themselves_4110" + } + ] + ] + ], + "affectedFilesPendingEmit": [ + [ + "./mapped.ts", + "Js", + 2 + ], + [ + "./usage.ts", + "Js", + 3 + ] + ], + "size": 1759 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/usage.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/usage.ts + + +Edit [1]:: no change + +tsgo +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +usage.ts:4:18 - error TS4109: Type arguments for 'Array' circularly reference themselves. + +4 export const a = array[0]; +   ~~~~~~~~ + +usage.ts:5:18 - error TS4110: Tuple type arguments circularly reference themselves. + +5 export const b = tuple[0]; +   ~~~~~~~~ + + +Found 2 errors in the same file, starting at: usage.ts:4 + + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: + + +Edit [2]:: edit the mapped declaration +//// [/home/src/workspaces/project/mapped.ts] *modified* +export type M = { [K in keyof T]: T extends M ? 1 : 2 }; +// comment-only edit + + +tsgo +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +usage.ts:4:18 - error TS4109: Type arguments for 'Array' circularly reference themselves. + +4 export const a = array[0]; +   ~~~~~~~~ + +usage.ts:5:18 - error TS4110: Tuple type arguments circularly reference themselves. + +5 export const b = tuple[0]; +   ~~~~~~~~ + + +Found 2 errors in the same file, starting at: usage.ts:4 + +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2025.full.d.ts","./mapped.ts","./usage.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2dc296bc77e31d61698540af221675f4-export type M = { [K in keyof T]: T extends M ? 1 : 2 };\n// comment-only edit\n","signature":"cd8f22a56c1652f8e59d93951f189afa-export type M = {\n [K in keyof T]: T extends M ? 1 : 2;\n};\n","impliedNodeFormat":1},{"version":"5091cc0d2d42095ac097c8c2788b840b-import type { M } from \"./mapped.js\";\ndeclare const array: M;\ndeclare const tuple: M<[string]>;\nexport const a = array[0];\nexport const b = tuple[0];\n// comment-only edit\n","signature":"1eca59763ede36c95a8c60156e1278a8-export declare const a: any;\nexport declare const b: any;\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"strict":true},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":123,"end":131,"code":4109,"category":1,"messageKey":"Type_arguments_for_0_circularly_reference_themselves_4109","messageArgs":["Array"]},{"pos":150,"end":158,"code":4110,"category":1,"messageKey":"Tuple_type_arguments_circularly_reference_themselves_4110"}]]],"affectedFilesPendingEmit":[2,3]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./mapped.ts", + "./usage.ts" + ], + "original": [ + 2, + 3 + ] + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./mapped.ts", + "./usage.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./mapped.ts", + "version": "2dc296bc77e31d61698540af221675f4-export type M = { [K in keyof T]: T extends M ? 1 : 2 };\n// comment-only edit\n", + "signature": "cd8f22a56c1652f8e59d93951f189afa-export type M = {\n [K in keyof T]: T extends M ? 1 : 2;\n};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "2dc296bc77e31d61698540af221675f4-export type M = { [K in keyof T]: T extends M ? 1 : 2 };\n// comment-only edit\n", + "signature": "cd8f22a56c1652f8e59d93951f189afa-export type M = {\n [K in keyof T]: T extends M ? 1 : 2;\n};\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./usage.ts", + "version": "5091cc0d2d42095ac097c8c2788b840b-import type { M } from \"./mapped.js\";\ndeclare const array: M;\ndeclare const tuple: M<[string]>;\nexport const a = array[0];\nexport const b = tuple[0];\n// comment-only edit\n", + "signature": "1eca59763ede36c95a8c60156e1278a8-export declare const a: any;\nexport declare const b: any;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "5091cc0d2d42095ac097c8c2788b840b-import type { M } from \"./mapped.js\";\ndeclare const array: M;\ndeclare const tuple: M<[string]>;\nexport const a = array[0];\nexport const b = tuple[0];\n// comment-only edit\n", + "signature": "1eca59763ede36c95a8c60156e1278a8-export declare const a: any;\nexport declare const b: any;\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "./mapped.ts" + ] + ], + "options": { + "strict": true + }, + "referencedMap": { + "./usage.ts": [ + "./mapped.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + [ + "./usage.ts", + [ + { + "pos": 123, + "end": 131, + "code": 4109, + "category": 1, + "messageKey": "Type_arguments_for_0_circularly_reference_themselves_4109", + "messageArgs": [ + "Array" + ] + }, + { + "pos": 150, + "end": 158, + "code": 4110, + "category": 1, + "messageKey": "Tuple_type_arguments_circularly_reference_themselves_4110" + } + ] + ] + ], + "affectedFilesPendingEmit": [ + [ + "./mapped.ts", + "Js", + 2 + ], + [ + "./usage.ts", + "Js", + 3 + ] + ], + "size": 1936 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/mapped.ts +*refresh* /home/src/workspaces/project/usage.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/mapped.ts +(computed .d.ts) /home/src/workspaces/project/usage.ts + + +Edit [3]:: no change + +tsgo +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +usage.ts:4:18 - error TS4109: Type arguments for 'Array' circularly reference themselves. + +4 export const a = array[0]; +   ~~~~~~~~ + +usage.ts:5:18 - error TS4110: Tuple type arguments circularly reference themselves. + +5 export const b = tuple[0]; +   ~~~~~~~~ + + +Found 2 errors in the same file, starting at: usage.ts:4 + + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: diff --git a/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-array-types.js b/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-array-types.js new file mode 100644 index 0000000000000..17e7b32d96f03 --- /dev/null +++ b/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-array-types.js @@ -0,0 +1,964 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: +//// [/home/src/tslibs/TS/Lib/lib.es2025.full.d.ts] *new* +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray { readonly length: number; readonly [n: number]: T; } +interface SymbolConstructor { + (desc?: string | number): symbol; + for(name: string): symbol; + readonly toStringTag: symbol; +} +declare var Symbol: SymbolConstructor; +interface Symbol { + readonly [Symbol.toStringTag]: string; +} +declare const console: { log(msg: any): void; }; +//// [/home/src/workspaces/project/index.ts] *new* +type Json = string | Json[]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: [] as Json[] }); +const items: Json[] = value.items; +value.items[0] = ["ok"]; +value.items[0] = 123; + +type Mutable = { -readonly [K in keyof T]: Parsed }; +type Immutable = { readonly [K in keyof T]: Parsed }; +type Optional = { [K in keyof T]?: Parsed }; +type Required = { [K in keyof T]-?: Parsed }; +declare const mutable: Mutable; +declare const immutable: Immutable; +declare const optional: Optional; +declare const required: Required<(Json | undefined)[]>; +mutable[0] = ["ok"]; +immutable[0] = "error"; +optional[0] = undefined; +required[0] = undefined; + +function convert(value: T[]): Parsed { + return wrap(value); +} +const converted: Json[] = convert(["ok"]); +type Tuple = string | [Tuple]; +type ReadonlyTuple = string | readonly [ReadonlyTuple]; +type OptionalTuple = string | [OptionalTuple?]; +type RestTuple = string | [head: RestTuple, ...tail: RestTuple[]]; +type LeadingRestTuple = string | [...head: LeadingRestTuple[], tail: LeadingRestTuple]; +declare const tuple: Parsed<[Tuple]>; +declare const readonlyTuple: Parsed; +declare const optionalTuple: Parsed<[OptionalTuple?]>; +declare const restTuple: Parsed<[head: RestTuple, ...tail: RestTuple[]]>; +declare const leadingRestTuple: Parsed<[...head: LeadingRestTuple[], tail: LeadingRestTuple]>; +const tupleItem: Tuple = tuple[0]; +const optionalItem: OptionalTuple | undefined = optionalTuple[0]; +const restItem: RestTuple = restTuple[1]; +const leadingRestItem: LeadingRestTuple = leadingRestTuple[0]; +tuple[0] = ["ok"]; +tuple[0] = 123; +readonlyTuple[0] = "error"; +optionalTuple[0] = undefined; +optionalTuple[0] = 123; +restTuple[1] = 123; +leadingRestTuple[0] = 123; + +declare const optionalRest: Optional<[...items: Json[], last: Json]>; +const optionalRestItems: (Json | undefined)[] = optionalRest; +type DeepOptional = T extends object ? { [K in keyof T]?: DeepOptional } : T; +declare const deepOptionalRest: DeepOptional<[...items: LeadingRestTuple[], last: LeadingRestTuple]>; +const emptyOptionalRest: typeof deepOptionalRest = []; +deepOptionalRest[0] = undefined; +deepOptionalRest[0] = 123; +declare const requiredTuple: Required<[item?: Json]>; +requiredTuple[0] = undefined; +function convertTuple(value: [string, ...T]): Parsed<[string, ...T]> { + return wrap(value); +} +const convertedTuple: [string, [Tuple], number] = convertTuple(["ok", ["nested"] as [Tuple], 1]); +declare const variadicUnion: Parsed<[string, ...([Tuple] | [Tuple, Tuple])]>; +const mappedUnion: [string, Tuple] | [string, Tuple, Tuple] = variadicUnion; +declare const intersection: Parsed; +intersection[0] = 123; +type First = string | [Second]; +type Second = string | First[]; +declare const mutual: Parsed<[First, Second]>; +const mutualItems: [First, Second] = mutual; +mutual[0] = 123; +type Endless = T extends string ? Endless : never; +type NonTerminating = Endless; +//// [/home/src/workspaces/project/tsconfig.json] *new* +{"compilerOptions": {"strict": true, "declaration": true, "incremental": true}} + +tsgo +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +index.ts:7:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed'. + +7 value.items[0] = 123; +  ~~~~~~~~~~~~~~ + +index.ts:18:1 - error TS2542: Index signature in type 'Immutable' only permits reading. + +18 immutable[0] = "error"; +  ~~~~~~~~~~~~ + +index.ts:20:1 - error TS2322: Type 'undefined' is not assignable to type 'string | Parsed'. + +20 required[0] = undefined; +  ~~~~~~~~~~~ + +index.ts:41:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed<[Tuple]>'. + +41 tuple[0] = 123; +  ~~~~~~~~ + +index.ts:42:15 - error TS2540: Cannot assign to '0' because it is a read-only property. + +42 readonlyTuple[0] = "error"; +   ~ + +index.ts:44:1 - error TS2322: Type '123' is not assignable to type 'string | Parsed<[(OptionalTuple | undefined)?]> | undefined'. + +44 optionalTuple[0] = 123; +  ~~~~~~~~~~~~~~~~ + +index.ts:45:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed<[head: RestTuple, ...tail: RestTuple[]]>'. + +45 restTuple[1] = 123; +  ~~~~~~~~~~~~ + +index.ts:46:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed<[...head: LeadingRestTuple[], tail: LeadingRestTuple]>'. + +46 leadingRestTuple[0] = 123; +  ~~~~~~~~~~~~~~~~~~~ + +index.ts:54:1 - error TS2322: Type '123' is not assignable to type 'string | DeepOptional<[...head: LeadingRestTuple[], tail: LeadingRestTuple]> | undefined'. + +54 deepOptionalRest[0] = 123; +  ~~~~~~~~~~~~~~~~~~~ + +index.ts:56:1 - error TS2322: Type 'undefined' is not assignable to type 'string | Parsed'. + +56 requiredTuple[0] = undefined; +  ~~~~~~~~~~~~~~~~ + +index.ts:64:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed'. + +64 intersection[0] = 123; +  ~~~~~~~~~~~~~~~ + +index.ts:69:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed<[Second]>'. + +69 mutual[0] = 123; +  ~~~~~~~~~ + +index.ts:71:23 - error TS2589: Type instantiation is excessively deep and possibly infinite. + +71 type NonTerminating = Endless; +   ~~~~~~~~~~~~~~~ + + +Found 13 errors in the same file, starting at: index.ts:7 + +//// [/home/src/workspaces/project/index.d.ts] *new* +type Json = string | Json[]; +type Parsed = T extends object ? { + [K in keyof T]: Parsed; +} : T; +export declare const value: { + items: Parsed; +}; +export {}; + +//// [/home/src/workspaces/project/index.js] *new* +export const value = wrap({ items: [] }); +const items = value.items; +value.items[0] = ["ok"]; +value.items[0] = 123; +mutable[0] = ["ok"]; +immutable[0] = "error"; +optional[0] = undefined; +required[0] = undefined; +function convert(value) { + return wrap(value); +} +const converted = convert(["ok"]); +const tupleItem = tuple[0]; +const optionalItem = optionalTuple[0]; +const restItem = restTuple[1]; +const leadingRestItem = leadingRestTuple[0]; +tuple[0] = ["ok"]; +tuple[0] = 123; +readonlyTuple[0] = "error"; +optionalTuple[0] = undefined; +optionalTuple[0] = 123; +restTuple[1] = 123; +leadingRestTuple[0] = 123; +const optionalRestItems = optionalRest; +const emptyOptionalRest = []; +deepOptionalRest[0] = undefined; +deepOptionalRest[0] = 123; +requiredTuple[0] = undefined; +function convertTuple(value) { + return wrap(value); +} +const convertedTuple = convertTuple(["ok", ["nested"], 1]); +const mappedUnion = variadicUnion; +intersection[0] = 123; +const mutualItems = mutual; +mutual[0] = 123; + +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./index.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"5bac20740fac0047dd901a8d727d5bd4-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\nconst items: Json[] = value.items;\nvalue.items[0] = [\"ok\"];\nvalue.items[0] = 123;\n\ntype Mutable = { -readonly [K in keyof T]: Parsed };\ntype Immutable = { readonly [K in keyof T]: Parsed };\ntype Optional = { [K in keyof T]?: Parsed };\ntype Required = { [K in keyof T]-?: Parsed };\ndeclare const mutable: Mutable;\ndeclare const immutable: Immutable;\ndeclare const optional: Optional;\ndeclare const required: Required<(Json | undefined)[]>;\nmutable[0] = [\"ok\"];\nimmutable[0] = \"error\";\noptional[0] = undefined;\nrequired[0] = undefined;\n\nfunction convert(value: T[]): Parsed {\n return wrap(value);\n}\nconst converted: Json[] = convert([\"ok\"]);\ntype Tuple = string | [Tuple];\ntype ReadonlyTuple = string | readonly [ReadonlyTuple];\ntype OptionalTuple = string | [OptionalTuple?];\ntype RestTuple = string | [head: RestTuple, ...tail: RestTuple[]];\ntype LeadingRestTuple = string | [...head: LeadingRestTuple[], tail: LeadingRestTuple];\ndeclare const tuple: Parsed<[Tuple]>;\ndeclare const readonlyTuple: Parsed;\ndeclare const optionalTuple: Parsed<[OptionalTuple?]>;\ndeclare const restTuple: Parsed<[head: RestTuple, ...tail: RestTuple[]]>;\ndeclare const leadingRestTuple: Parsed<[...head: LeadingRestTuple[], tail: LeadingRestTuple]>;\nconst tupleItem: Tuple = tuple[0];\nconst optionalItem: OptionalTuple | undefined = optionalTuple[0];\nconst restItem: RestTuple = restTuple[1];\nconst leadingRestItem: LeadingRestTuple = leadingRestTuple[0];\ntuple[0] = [\"ok\"];\ntuple[0] = 123;\nreadonlyTuple[0] = \"error\";\noptionalTuple[0] = undefined;\noptionalTuple[0] = 123;\nrestTuple[1] = 123;\nleadingRestTuple[0] = 123;\n\ndeclare const optionalRest: Optional<[...items: Json[], last: Json]>;\nconst optionalRestItems: (Json | undefined)[] = optionalRest;\ntype DeepOptional = T extends object ? { [K in keyof T]?: DeepOptional } : T;\ndeclare const deepOptionalRest: DeepOptional<[...items: LeadingRestTuple[], last: LeadingRestTuple]>;\nconst emptyOptionalRest: typeof deepOptionalRest = [];\ndeepOptionalRest[0] = undefined;\ndeepOptionalRest[0] = 123;\ndeclare const requiredTuple: Required<[item?: Json]>;\nrequiredTuple[0] = undefined;\nfunction convertTuple(value: [string, ...T]): Parsed<[string, ...T]> {\n return wrap(value);\n}\nconst convertedTuple: [string, [Tuple], number] = convertTuple([\"ok\", [\"nested\"] as [Tuple], 1]);\ndeclare const variadicUnion: Parsed<[string, ...([Tuple] | [Tuple, Tuple])]>;\nconst mappedUnion: [string, Tuple] | [string, Tuple, Tuple] = variadicUnion;\ndeclare const intersection: Parsed;\nintersection[0] = 123;\ntype First = string | [Second];\ntype Second = string | First[];\ndeclare const mutual: Parsed<[First, Second]>;\nconst mutualItems: [First, Second] = mutual;\nmutual[0] = 123;\ntype Endless = T extends string ? Endless : never;\ntype NonTerminating = Endless;","signature":"fcde39c2b051f56c2bdf4ff787c0b50e-type Json = string | Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"declaration":true,"strict":true},"semanticDiagnosticsPerFile":[[2,[{"pos":262,"end":276,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string | Parsed"]},{"pos":731,"end":743,"code":2542,"category":1,"messageKey":"Index_signature_in_type_0_only_permits_reading_2542","messageArgs":["Immutable"]},{"pos":780,"end":791,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["undefined","string | Parsed"]},{"pos":1768,"end":1776,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string | Parsed<[Tuple]>"]},{"pos":1798,"end":1799,"code":2540,"category":1,"messageKey":"Cannot_assign_to_0_because_it_is_a_read_only_property_2540","messageArgs":["0"]},{"pos":1842,"end":1858,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["123","string | Parsed<[(OptionalTuple | undefined)?]> | undefined"]},{"pos":1866,"end":1878,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string | Parsed<[head: RestTuple, ...tail: RestTuple[]]>"]},{"pos":1886,"end":1905,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string | Parsed<[...head: LeadingRestTuple[], tail: LeadingRestTuple]>"]},{"pos":2323,"end":2342,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["123","string | DeepOptional<[...head: LeadingRestTuple[], tail: LeadingRestTuple]> | undefined"]},{"pos":2404,"end":2420,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["undefined","string | Parsed"]},{"pos":2867,"end":2882,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string | Parsed"]},{"pos":3046,"end":3055,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string | Parsed<[Second]>"]},{"pos":3142,"end":3157,"code":2589,"category":1,"messageKey":"Type_instantiation_is_excessively_deep_and_possibly_infinite_2589"}]]]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./index.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./index.ts", + "version": "5bac20740fac0047dd901a8d727d5bd4-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\nconst items: Json[] = value.items;\nvalue.items[0] = [\"ok\"];\nvalue.items[0] = 123;\n\ntype Mutable = { -readonly [K in keyof T]: Parsed };\ntype Immutable = { readonly [K in keyof T]: Parsed };\ntype Optional = { [K in keyof T]?: Parsed };\ntype Required = { [K in keyof T]-?: Parsed };\ndeclare const mutable: Mutable;\ndeclare const immutable: Immutable;\ndeclare const optional: Optional;\ndeclare const required: Required<(Json | undefined)[]>;\nmutable[0] = [\"ok\"];\nimmutable[0] = \"error\";\noptional[0] = undefined;\nrequired[0] = undefined;\n\nfunction convert(value: T[]): Parsed {\n return wrap(value);\n}\nconst converted: Json[] = convert([\"ok\"]);\ntype Tuple = string | [Tuple];\ntype ReadonlyTuple = string | readonly [ReadonlyTuple];\ntype OptionalTuple = string | [OptionalTuple?];\ntype RestTuple = string | [head: RestTuple, ...tail: RestTuple[]];\ntype LeadingRestTuple = string | [...head: LeadingRestTuple[], tail: LeadingRestTuple];\ndeclare const tuple: Parsed<[Tuple]>;\ndeclare const readonlyTuple: Parsed;\ndeclare const optionalTuple: Parsed<[OptionalTuple?]>;\ndeclare const restTuple: Parsed<[head: RestTuple, ...tail: RestTuple[]]>;\ndeclare const leadingRestTuple: Parsed<[...head: LeadingRestTuple[], tail: LeadingRestTuple]>;\nconst tupleItem: Tuple = tuple[0];\nconst optionalItem: OptionalTuple | undefined = optionalTuple[0];\nconst restItem: RestTuple = restTuple[1];\nconst leadingRestItem: LeadingRestTuple = leadingRestTuple[0];\ntuple[0] = [\"ok\"];\ntuple[0] = 123;\nreadonlyTuple[0] = \"error\";\noptionalTuple[0] = undefined;\noptionalTuple[0] = 123;\nrestTuple[1] = 123;\nleadingRestTuple[0] = 123;\n\ndeclare const optionalRest: Optional<[...items: Json[], last: Json]>;\nconst optionalRestItems: (Json | undefined)[] = optionalRest;\ntype DeepOptional = T extends object ? { [K in keyof T]?: DeepOptional } : T;\ndeclare const deepOptionalRest: DeepOptional<[...items: LeadingRestTuple[], last: LeadingRestTuple]>;\nconst emptyOptionalRest: typeof deepOptionalRest = [];\ndeepOptionalRest[0] = undefined;\ndeepOptionalRest[0] = 123;\ndeclare const requiredTuple: Required<[item?: Json]>;\nrequiredTuple[0] = undefined;\nfunction convertTuple(value: [string, ...T]): Parsed<[string, ...T]> {\n return wrap(value);\n}\nconst convertedTuple: [string, [Tuple], number] = convertTuple([\"ok\", [\"nested\"] as [Tuple], 1]);\ndeclare const variadicUnion: Parsed<[string, ...([Tuple] | [Tuple, Tuple])]>;\nconst mappedUnion: [string, Tuple] | [string, Tuple, Tuple] = variadicUnion;\ndeclare const intersection: Parsed;\nintersection[0] = 123;\ntype First = string | [Second];\ntype Second = string | First[];\ndeclare const mutual: Parsed<[First, Second]>;\nconst mutualItems: [First, Second] = mutual;\nmutual[0] = 123;\ntype Endless = T extends string ? Endless : never;\ntype NonTerminating = Endless;", + "signature": "fcde39c2b051f56c2bdf4ff787c0b50e-type Json = string | Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "5bac20740fac0047dd901a8d727d5bd4-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\nconst items: Json[] = value.items;\nvalue.items[0] = [\"ok\"];\nvalue.items[0] = 123;\n\ntype Mutable = { -readonly [K in keyof T]: Parsed };\ntype Immutable = { readonly [K in keyof T]: Parsed };\ntype Optional = { [K in keyof T]?: Parsed };\ntype Required = { [K in keyof T]-?: Parsed };\ndeclare const mutable: Mutable;\ndeclare const immutable: Immutable;\ndeclare const optional: Optional;\ndeclare const required: Required<(Json | undefined)[]>;\nmutable[0] = [\"ok\"];\nimmutable[0] = \"error\";\noptional[0] = undefined;\nrequired[0] = undefined;\n\nfunction convert(value: T[]): Parsed {\n return wrap(value);\n}\nconst converted: Json[] = convert([\"ok\"]);\ntype Tuple = string | [Tuple];\ntype ReadonlyTuple = string | readonly [ReadonlyTuple];\ntype OptionalTuple = string | [OptionalTuple?];\ntype RestTuple = string | [head: RestTuple, ...tail: RestTuple[]];\ntype LeadingRestTuple = string | [...head: LeadingRestTuple[], tail: LeadingRestTuple];\ndeclare const tuple: Parsed<[Tuple]>;\ndeclare const readonlyTuple: Parsed;\ndeclare const optionalTuple: Parsed<[OptionalTuple?]>;\ndeclare const restTuple: Parsed<[head: RestTuple, ...tail: RestTuple[]]>;\ndeclare const leadingRestTuple: Parsed<[...head: LeadingRestTuple[], tail: LeadingRestTuple]>;\nconst tupleItem: Tuple = tuple[0];\nconst optionalItem: OptionalTuple | undefined = optionalTuple[0];\nconst restItem: RestTuple = restTuple[1];\nconst leadingRestItem: LeadingRestTuple = leadingRestTuple[0];\ntuple[0] = [\"ok\"];\ntuple[0] = 123;\nreadonlyTuple[0] = \"error\";\noptionalTuple[0] = undefined;\noptionalTuple[0] = 123;\nrestTuple[1] = 123;\nleadingRestTuple[0] = 123;\n\ndeclare const optionalRest: Optional<[...items: Json[], last: Json]>;\nconst optionalRestItems: (Json | undefined)[] = optionalRest;\ntype DeepOptional = T extends object ? { [K in keyof T]?: DeepOptional } : T;\ndeclare const deepOptionalRest: DeepOptional<[...items: LeadingRestTuple[], last: LeadingRestTuple]>;\nconst emptyOptionalRest: typeof deepOptionalRest = [];\ndeepOptionalRest[0] = undefined;\ndeepOptionalRest[0] = 123;\ndeclare const requiredTuple: Required<[item?: Json]>;\nrequiredTuple[0] = undefined;\nfunction convertTuple(value: [string, ...T]): Parsed<[string, ...T]> {\n return wrap(value);\n}\nconst convertedTuple: [string, [Tuple], number] = convertTuple([\"ok\", [\"nested\"] as [Tuple], 1]);\ndeclare const variadicUnion: Parsed<[string, ...([Tuple] | [Tuple, Tuple])]>;\nconst mappedUnion: [string, Tuple] | [string, Tuple, Tuple] = variadicUnion;\ndeclare const intersection: Parsed;\nintersection[0] = 123;\ntype First = string | [Second];\ntype Second = string | First[];\ndeclare const mutual: Parsed<[First, Second]>;\nconst mutualItems: [First, Second] = mutual;\nmutual[0] = 123;\ntype Endless = T extends string ? Endless : never;\ntype NonTerminating = Endless;", + "signature": "fcde39c2b051f56c2bdf4ff787c0b50e-type Json = string | Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "declaration": true, + "strict": true + }, + "semanticDiagnosticsPerFile": [ + [ + "./index.ts", + [ + { + "pos": 262, + "end": 276, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string | Parsed" + ] + }, + { + "pos": 731, + "end": 743, + "code": 2542, + "category": 1, + "messageKey": "Index_signature_in_type_0_only_permits_reading_2542", + "messageArgs": [ + "Immutable" + ] + }, + { + "pos": 780, + "end": 791, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "undefined", + "string | Parsed" + ] + }, + { + "pos": 1768, + "end": 1776, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string | Parsed<[Tuple]>" + ] + }, + { + "pos": 1798, + "end": 1799, + "code": 2540, + "category": 1, + "messageKey": "Cannot_assign_to_0_because_it_is_a_read_only_property_2540", + "messageArgs": [ + "0" + ] + }, + { + "pos": 1842, + "end": 1858, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "123", + "string | Parsed<[(OptionalTuple | undefined)?]> | undefined" + ] + }, + { + "pos": 1866, + "end": 1878, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string | Parsed<[head: RestTuple, ...tail: RestTuple[]]>" + ] + }, + { + "pos": 1886, + "end": 1905, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string | Parsed<[...head: LeadingRestTuple[], tail: LeadingRestTuple]>" + ] + }, + { + "pos": 2323, + "end": 2342, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "123", + "string | DeepOptional<[...head: LeadingRestTuple[], tail: LeadingRestTuple]> | undefined" + ] + }, + { + "pos": 2404, + "end": 2420, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "undefined", + "string | Parsed" + ] + }, + { + "pos": 2867, + "end": 2882, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string | Parsed" + ] + }, + { + "pos": 3046, + "end": 3055, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string | Parsed<[Second]>" + ] + }, + { + "pos": 3142, + "end": 3157, + "code": 2589, + "category": 1, + "messageKey": "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589" + } + ] + ] + ], + "size": 6707 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/index.ts +Signatures:: +(stored at emit) /home/src/workspaces/project/index.ts + + +Edit [0]:: no change + +tsgo +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +index.ts:7:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed'. + +7 value.items[0] = 123; +  ~~~~~~~~~~~~~~ + +index.ts:18:1 - error TS2542: Index signature in type 'Immutable' only permits reading. + +18 immutable[0] = "error"; +  ~~~~~~~~~~~~ + +index.ts:20:1 - error TS2322: Type 'undefined' is not assignable to type 'string | Parsed'. + +20 required[0] = undefined; +  ~~~~~~~~~~~ + +index.ts:41:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed<[Tuple]>'. + +41 tuple[0] = 123; +  ~~~~~~~~ + +index.ts:42:15 - error TS2540: Cannot assign to '0' because it is a read-only property. + +42 readonlyTuple[0] = "error"; +   ~ + +index.ts:44:1 - error TS2322: Type '123' is not assignable to type 'string | Parsed<[(OptionalTuple | undefined)?]> | undefined'. + +44 optionalTuple[0] = 123; +  ~~~~~~~~~~~~~~~~ + +index.ts:45:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed<[head: RestTuple, ...tail: RestTuple[]]>'. + +45 restTuple[1] = 123; +  ~~~~~~~~~~~~ + +index.ts:46:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed<[...head: LeadingRestTuple[], tail: LeadingRestTuple]>'. + +46 leadingRestTuple[0] = 123; +  ~~~~~~~~~~~~~~~~~~~ + +index.ts:54:1 - error TS2322: Type '123' is not assignable to type 'string | DeepOptional<[...head: LeadingRestTuple[], tail: LeadingRestTuple]> | undefined'. + +54 deepOptionalRest[0] = 123; +  ~~~~~~~~~~~~~~~~~~~ + +index.ts:56:1 - error TS2322: Type 'undefined' is not assignable to type 'string | Parsed'. + +56 requiredTuple[0] = undefined; +  ~~~~~~~~~~~~~~~~ + +index.ts:64:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed'. + +64 intersection[0] = 123; +  ~~~~~~~~~~~~~~~ + +index.ts:69:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed<[Second]>'. + +69 mutual[0] = 123; +  ~~~~~~~~~ + +index.ts:71:23 - error TS2589: Type instantiation is excessively deep and possibly infinite. + +71 type NonTerminating = Endless; +   ~~~~~~~~~~~~~~~ + + +Found 13 errors in the same file, starting at: index.ts:7 + + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: + + +Edit [1]:: add a comment +//// [/home/src/workspaces/project/index.ts] *modified* +type Json = string | Json[]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: [] as Json[] }); +const items: Json[] = value.items; +value.items[0] = ["ok"]; +value.items[0] = 123; + +type Mutable = { -readonly [K in keyof T]: Parsed }; +type Immutable = { readonly [K in keyof T]: Parsed }; +type Optional = { [K in keyof T]?: Parsed }; +type Required = { [K in keyof T]-?: Parsed }; +declare const mutable: Mutable; +declare const immutable: Immutable; +declare const optional: Optional; +declare const required: Required<(Json | undefined)[]>; +mutable[0] = ["ok"]; +immutable[0] = "error"; +optional[0] = undefined; +required[0] = undefined; + +function convert(value: T[]): Parsed { + return wrap(value); +} +const converted: Json[] = convert(["ok"]); +type Tuple = string | [Tuple]; +type ReadonlyTuple = string | readonly [ReadonlyTuple]; +type OptionalTuple = string | [OptionalTuple?]; +type RestTuple = string | [head: RestTuple, ...tail: RestTuple[]]; +type LeadingRestTuple = string | [...head: LeadingRestTuple[], tail: LeadingRestTuple]; +declare const tuple: Parsed<[Tuple]>; +declare const readonlyTuple: Parsed; +declare const optionalTuple: Parsed<[OptionalTuple?]>; +declare const restTuple: Parsed<[head: RestTuple, ...tail: RestTuple[]]>; +declare const leadingRestTuple: Parsed<[...head: LeadingRestTuple[], tail: LeadingRestTuple]>; +const tupleItem: Tuple = tuple[0]; +const optionalItem: OptionalTuple | undefined = optionalTuple[0]; +const restItem: RestTuple = restTuple[1]; +const leadingRestItem: LeadingRestTuple = leadingRestTuple[0]; +tuple[0] = ["ok"]; +tuple[0] = 123; +readonlyTuple[0] = "error"; +optionalTuple[0] = undefined; +optionalTuple[0] = 123; +restTuple[1] = 123; +leadingRestTuple[0] = 123; + +declare const optionalRest: Optional<[...items: Json[], last: Json]>; +const optionalRestItems: (Json | undefined)[] = optionalRest; +type DeepOptional = T extends object ? { [K in keyof T]?: DeepOptional } : T; +declare const deepOptionalRest: DeepOptional<[...items: LeadingRestTuple[], last: LeadingRestTuple]>; +const emptyOptionalRest: typeof deepOptionalRest = []; +deepOptionalRest[0] = undefined; +deepOptionalRest[0] = 123; +declare const requiredTuple: Required<[item?: Json]>; +requiredTuple[0] = undefined; +function convertTuple(value: [string, ...T]): Parsed<[string, ...T]> { + return wrap(value); +} +const convertedTuple: [string, [Tuple], number] = convertTuple(["ok", ["nested"] as [Tuple], 1]); +declare const variadicUnion: Parsed<[string, ...([Tuple] | [Tuple, Tuple])]>; +const mappedUnion: [string, Tuple] | [string, Tuple, Tuple] = variadicUnion; +declare const intersection: Parsed; +intersection[0] = 123; +type First = string | [Second]; +type Second = string | First[]; +declare const mutual: Parsed<[First, Second]>; +const mutualItems: [First, Second] = mutual; +mutual[0] = 123; +type Endless = T extends string ? Endless : never; +type NonTerminating = Endless; +// comment-only edit + + +tsgo +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +index.ts:7:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed'. + +7 value.items[0] = 123; +  ~~~~~~~~~~~~~~ + +index.ts:18:1 - error TS2542: Index signature in type 'Immutable' only permits reading. + +18 immutable[0] = "error"; +  ~~~~~~~~~~~~ + +index.ts:20:1 - error TS2322: Type 'undefined' is not assignable to type 'string | Parsed'. + +20 required[0] = undefined; +  ~~~~~~~~~~~ + +index.ts:41:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed<[Tuple]>'. + +41 tuple[0] = 123; +  ~~~~~~~~ + +index.ts:42:15 - error TS2540: Cannot assign to '0' because it is a read-only property. + +42 readonlyTuple[0] = "error"; +   ~ + +index.ts:44:1 - error TS2322: Type '123' is not assignable to type 'string | Parsed<[(OptionalTuple | undefined)?]> | undefined'. + +44 optionalTuple[0] = 123; +  ~~~~~~~~~~~~~~~~ + +index.ts:45:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed<[head: RestTuple, ...tail: RestTuple[]]>'. + +45 restTuple[1] = 123; +  ~~~~~~~~~~~~ + +index.ts:46:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed<[...head: LeadingRestTuple[], tail: LeadingRestTuple]>'. + +46 leadingRestTuple[0] = 123; +  ~~~~~~~~~~~~~~~~~~~ + +index.ts:54:1 - error TS2322: Type '123' is not assignable to type 'string | DeepOptional<[...head: LeadingRestTuple[], tail: LeadingRestTuple]> | undefined'. + +54 deepOptionalRest[0] = 123; +  ~~~~~~~~~~~~~~~~~~~ + +index.ts:56:1 - error TS2322: Type 'undefined' is not assignable to type 'string | Parsed'. + +56 requiredTuple[0] = undefined; +  ~~~~~~~~~~~~~~~~ + +index.ts:64:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed'. + +64 intersection[0] = 123; +  ~~~~~~~~~~~~~~~ + +index.ts:69:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed<[Second]>'. + +69 mutual[0] = 123; +  ~~~~~~~~~ + +index.ts:71:23 - error TS2589: Type instantiation is excessively deep and possibly infinite. + +71 type NonTerminating = Endless; +   ~~~~~~~~~~~~~~~ + + +Found 13 errors in the same file, starting at: index.ts:7 + +//// [/home/src/workspaces/project/index.d.ts] *rewrite with same content* +//// [/home/src/workspaces/project/index.js] *modified* +export const value = wrap({ items: [] }); +const items = value.items; +value.items[0] = ["ok"]; +value.items[0] = 123; +mutable[0] = ["ok"]; +immutable[0] = "error"; +optional[0] = undefined; +required[0] = undefined; +function convert(value) { + return wrap(value); +} +const converted = convert(["ok"]); +const tupleItem = tuple[0]; +const optionalItem = optionalTuple[0]; +const restItem = restTuple[1]; +const leadingRestItem = leadingRestTuple[0]; +tuple[0] = ["ok"]; +tuple[0] = 123; +readonlyTuple[0] = "error"; +optionalTuple[0] = undefined; +optionalTuple[0] = 123; +restTuple[1] = 123; +leadingRestTuple[0] = 123; +const optionalRestItems = optionalRest; +const emptyOptionalRest = []; +deepOptionalRest[0] = undefined; +deepOptionalRest[0] = 123; +requiredTuple[0] = undefined; +function convertTuple(value) { + return wrap(value); +} +const convertedTuple = convertTuple(["ok", ["nested"], 1]); +const mappedUnion = variadicUnion; +intersection[0] = 123; +const mutualItems = mutual; +mutual[0] = 123; +// comment-only edit + +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./index.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"953936a7d2e44e8d543bdcdc4ae0637f-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\nconst items: Json[] = value.items;\nvalue.items[0] = [\"ok\"];\nvalue.items[0] = 123;\n\ntype Mutable = { -readonly [K in keyof T]: Parsed };\ntype Immutable = { readonly [K in keyof T]: Parsed };\ntype Optional = { [K in keyof T]?: Parsed };\ntype Required = { [K in keyof T]-?: Parsed };\ndeclare const mutable: Mutable;\ndeclare const immutable: Immutable;\ndeclare const optional: Optional;\ndeclare const required: Required<(Json | undefined)[]>;\nmutable[0] = [\"ok\"];\nimmutable[0] = \"error\";\noptional[0] = undefined;\nrequired[0] = undefined;\n\nfunction convert(value: T[]): Parsed {\n return wrap(value);\n}\nconst converted: Json[] = convert([\"ok\"]);\ntype Tuple = string | [Tuple];\ntype ReadonlyTuple = string | readonly [ReadonlyTuple];\ntype OptionalTuple = string | [OptionalTuple?];\ntype RestTuple = string | [head: RestTuple, ...tail: RestTuple[]];\ntype LeadingRestTuple = string | [...head: LeadingRestTuple[], tail: LeadingRestTuple];\ndeclare const tuple: Parsed<[Tuple]>;\ndeclare const readonlyTuple: Parsed;\ndeclare const optionalTuple: Parsed<[OptionalTuple?]>;\ndeclare const restTuple: Parsed<[head: RestTuple, ...tail: RestTuple[]]>;\ndeclare const leadingRestTuple: Parsed<[...head: LeadingRestTuple[], tail: LeadingRestTuple]>;\nconst tupleItem: Tuple = tuple[0];\nconst optionalItem: OptionalTuple | undefined = optionalTuple[0];\nconst restItem: RestTuple = restTuple[1];\nconst leadingRestItem: LeadingRestTuple = leadingRestTuple[0];\ntuple[0] = [\"ok\"];\ntuple[0] = 123;\nreadonlyTuple[0] = \"error\";\noptionalTuple[0] = undefined;\noptionalTuple[0] = 123;\nrestTuple[1] = 123;\nleadingRestTuple[0] = 123;\n\ndeclare const optionalRest: Optional<[...items: Json[], last: Json]>;\nconst optionalRestItems: (Json | undefined)[] = optionalRest;\ntype DeepOptional = T extends object ? { [K in keyof T]?: DeepOptional } : T;\ndeclare const deepOptionalRest: DeepOptional<[...items: LeadingRestTuple[], last: LeadingRestTuple]>;\nconst emptyOptionalRest: typeof deepOptionalRest = [];\ndeepOptionalRest[0] = undefined;\ndeepOptionalRest[0] = 123;\ndeclare const requiredTuple: Required<[item?: Json]>;\nrequiredTuple[0] = undefined;\nfunction convertTuple(value: [string, ...T]): Parsed<[string, ...T]> {\n return wrap(value);\n}\nconst convertedTuple: [string, [Tuple], number] = convertTuple([\"ok\", [\"nested\"] as [Tuple], 1]);\ndeclare const variadicUnion: Parsed<[string, ...([Tuple] | [Tuple, Tuple])]>;\nconst mappedUnion: [string, Tuple] | [string, Tuple, Tuple] = variadicUnion;\ndeclare const intersection: Parsed;\nintersection[0] = 123;\ntype First = string | [Second];\ntype Second = string | First[];\ndeclare const mutual: Parsed<[First, Second]>;\nconst mutualItems: [First, Second] = mutual;\nmutual[0] = 123;\ntype Endless = T extends string ? Endless : never;\ntype NonTerminating = Endless;\n// comment-only edit\n","signature":"fcde39c2b051f56c2bdf4ff787c0b50e-type Json = string | Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"declaration":true,"strict":true},"semanticDiagnosticsPerFile":[[2,[{"pos":262,"end":276,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string | Parsed"]},{"pos":731,"end":743,"code":2542,"category":1,"messageKey":"Index_signature_in_type_0_only_permits_reading_2542","messageArgs":["Immutable"]},{"pos":780,"end":791,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["undefined","string | Parsed"]},{"pos":1768,"end":1776,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string | Parsed<[Tuple]>"]},{"pos":1798,"end":1799,"code":2540,"category":1,"messageKey":"Cannot_assign_to_0_because_it_is_a_read_only_property_2540","messageArgs":["0"]},{"pos":1842,"end":1858,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["123","string | Parsed<[(OptionalTuple | undefined)?]> | undefined"]},{"pos":1866,"end":1878,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string | Parsed<[head: RestTuple, ...tail: RestTuple[]]>"]},{"pos":1886,"end":1905,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string | Parsed<[...head: LeadingRestTuple[], tail: LeadingRestTuple]>"]},{"pos":2323,"end":2342,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["123","string | DeepOptional<[...head: LeadingRestTuple[], tail: LeadingRestTuple]> | undefined"]},{"pos":2404,"end":2420,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["undefined","string | Parsed"]},{"pos":2867,"end":2882,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string | Parsed"]},{"pos":3046,"end":3055,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string | Parsed<[Second]>"]},{"pos":3142,"end":3157,"code":2589,"category":1,"messageKey":"Type_instantiation_is_excessively_deep_and_possibly_infinite_2589"}]]]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./index.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./index.ts", + "version": "953936a7d2e44e8d543bdcdc4ae0637f-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\nconst items: Json[] = value.items;\nvalue.items[0] = [\"ok\"];\nvalue.items[0] = 123;\n\ntype Mutable = { -readonly [K in keyof T]: Parsed };\ntype Immutable = { readonly [K in keyof T]: Parsed };\ntype Optional = { [K in keyof T]?: Parsed };\ntype Required = { [K in keyof T]-?: Parsed };\ndeclare const mutable: Mutable;\ndeclare const immutable: Immutable;\ndeclare const optional: Optional;\ndeclare const required: Required<(Json | undefined)[]>;\nmutable[0] = [\"ok\"];\nimmutable[0] = \"error\";\noptional[0] = undefined;\nrequired[0] = undefined;\n\nfunction convert(value: T[]): Parsed {\n return wrap(value);\n}\nconst converted: Json[] = convert([\"ok\"]);\ntype Tuple = string | [Tuple];\ntype ReadonlyTuple = string | readonly [ReadonlyTuple];\ntype OptionalTuple = string | [OptionalTuple?];\ntype RestTuple = string | [head: RestTuple, ...tail: RestTuple[]];\ntype LeadingRestTuple = string | [...head: LeadingRestTuple[], tail: LeadingRestTuple];\ndeclare const tuple: Parsed<[Tuple]>;\ndeclare const readonlyTuple: Parsed;\ndeclare const optionalTuple: Parsed<[OptionalTuple?]>;\ndeclare const restTuple: Parsed<[head: RestTuple, ...tail: RestTuple[]]>;\ndeclare const leadingRestTuple: Parsed<[...head: LeadingRestTuple[], tail: LeadingRestTuple]>;\nconst tupleItem: Tuple = tuple[0];\nconst optionalItem: OptionalTuple | undefined = optionalTuple[0];\nconst restItem: RestTuple = restTuple[1];\nconst leadingRestItem: LeadingRestTuple = leadingRestTuple[0];\ntuple[0] = [\"ok\"];\ntuple[0] = 123;\nreadonlyTuple[0] = \"error\";\noptionalTuple[0] = undefined;\noptionalTuple[0] = 123;\nrestTuple[1] = 123;\nleadingRestTuple[0] = 123;\n\ndeclare const optionalRest: Optional<[...items: Json[], last: Json]>;\nconst optionalRestItems: (Json | undefined)[] = optionalRest;\ntype DeepOptional = T extends object ? { [K in keyof T]?: DeepOptional } : T;\ndeclare const deepOptionalRest: DeepOptional<[...items: LeadingRestTuple[], last: LeadingRestTuple]>;\nconst emptyOptionalRest: typeof deepOptionalRest = [];\ndeepOptionalRest[0] = undefined;\ndeepOptionalRest[0] = 123;\ndeclare const requiredTuple: Required<[item?: Json]>;\nrequiredTuple[0] = undefined;\nfunction convertTuple(value: [string, ...T]): Parsed<[string, ...T]> {\n return wrap(value);\n}\nconst convertedTuple: [string, [Tuple], number] = convertTuple([\"ok\", [\"nested\"] as [Tuple], 1]);\ndeclare const variadicUnion: Parsed<[string, ...([Tuple] | [Tuple, Tuple])]>;\nconst mappedUnion: [string, Tuple] | [string, Tuple, Tuple] = variadicUnion;\ndeclare const intersection: Parsed;\nintersection[0] = 123;\ntype First = string | [Second];\ntype Second = string | First[];\ndeclare const mutual: Parsed<[First, Second]>;\nconst mutualItems: [First, Second] = mutual;\nmutual[0] = 123;\ntype Endless = T extends string ? Endless : never;\ntype NonTerminating = Endless;\n// comment-only edit\n", + "signature": "fcde39c2b051f56c2bdf4ff787c0b50e-type Json = string | Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "953936a7d2e44e8d543bdcdc4ae0637f-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\nconst items: Json[] = value.items;\nvalue.items[0] = [\"ok\"];\nvalue.items[0] = 123;\n\ntype Mutable = { -readonly [K in keyof T]: Parsed };\ntype Immutable = { readonly [K in keyof T]: Parsed };\ntype Optional = { [K in keyof T]?: Parsed };\ntype Required = { [K in keyof T]-?: Parsed };\ndeclare const mutable: Mutable;\ndeclare const immutable: Immutable;\ndeclare const optional: Optional;\ndeclare const required: Required<(Json | undefined)[]>;\nmutable[0] = [\"ok\"];\nimmutable[0] = \"error\";\noptional[0] = undefined;\nrequired[0] = undefined;\n\nfunction convert(value: T[]): Parsed {\n return wrap(value);\n}\nconst converted: Json[] = convert([\"ok\"]);\ntype Tuple = string | [Tuple];\ntype ReadonlyTuple = string | readonly [ReadonlyTuple];\ntype OptionalTuple = string | [OptionalTuple?];\ntype RestTuple = string | [head: RestTuple, ...tail: RestTuple[]];\ntype LeadingRestTuple = string | [...head: LeadingRestTuple[], tail: LeadingRestTuple];\ndeclare const tuple: Parsed<[Tuple]>;\ndeclare const readonlyTuple: Parsed;\ndeclare const optionalTuple: Parsed<[OptionalTuple?]>;\ndeclare const restTuple: Parsed<[head: RestTuple, ...tail: RestTuple[]]>;\ndeclare const leadingRestTuple: Parsed<[...head: LeadingRestTuple[], tail: LeadingRestTuple]>;\nconst tupleItem: Tuple = tuple[0];\nconst optionalItem: OptionalTuple | undefined = optionalTuple[0];\nconst restItem: RestTuple = restTuple[1];\nconst leadingRestItem: LeadingRestTuple = leadingRestTuple[0];\ntuple[0] = [\"ok\"];\ntuple[0] = 123;\nreadonlyTuple[0] = \"error\";\noptionalTuple[0] = undefined;\noptionalTuple[0] = 123;\nrestTuple[1] = 123;\nleadingRestTuple[0] = 123;\n\ndeclare const optionalRest: Optional<[...items: Json[], last: Json]>;\nconst optionalRestItems: (Json | undefined)[] = optionalRest;\ntype DeepOptional = T extends object ? { [K in keyof T]?: DeepOptional } : T;\ndeclare const deepOptionalRest: DeepOptional<[...items: LeadingRestTuple[], last: LeadingRestTuple]>;\nconst emptyOptionalRest: typeof deepOptionalRest = [];\ndeepOptionalRest[0] = undefined;\ndeepOptionalRest[0] = 123;\ndeclare const requiredTuple: Required<[item?: Json]>;\nrequiredTuple[0] = undefined;\nfunction convertTuple(value: [string, ...T]): Parsed<[string, ...T]> {\n return wrap(value);\n}\nconst convertedTuple: [string, [Tuple], number] = convertTuple([\"ok\", [\"nested\"] as [Tuple], 1]);\ndeclare const variadicUnion: Parsed<[string, ...([Tuple] | [Tuple, Tuple])]>;\nconst mappedUnion: [string, Tuple] | [string, Tuple, Tuple] = variadicUnion;\ndeclare const intersection: Parsed;\nintersection[0] = 123;\ntype First = string | [Second];\ntype Second = string | First[];\ndeclare const mutual: Parsed<[First, Second]>;\nconst mutualItems: [First, Second] = mutual;\nmutual[0] = 123;\ntype Endless = T extends string ? Endless : never;\ntype NonTerminating = Endless;\n// comment-only edit\n", + "signature": "fcde39c2b051f56c2bdf4ff787c0b50e-type Json = string | Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "declaration": true, + "strict": true + }, + "semanticDiagnosticsPerFile": [ + [ + "./index.ts", + [ + { + "pos": 262, + "end": 276, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string | Parsed" + ] + }, + { + "pos": 731, + "end": 743, + "code": 2542, + "category": 1, + "messageKey": "Index_signature_in_type_0_only_permits_reading_2542", + "messageArgs": [ + "Immutable" + ] + }, + { + "pos": 780, + "end": 791, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "undefined", + "string | Parsed" + ] + }, + { + "pos": 1768, + "end": 1776, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string | Parsed<[Tuple]>" + ] + }, + { + "pos": 1798, + "end": 1799, + "code": 2540, + "category": 1, + "messageKey": "Cannot_assign_to_0_because_it_is_a_read_only_property_2540", + "messageArgs": [ + "0" + ] + }, + { + "pos": 1842, + "end": 1858, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "123", + "string | Parsed<[(OptionalTuple | undefined)?]> | undefined" + ] + }, + { + "pos": 1866, + "end": 1878, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string | Parsed<[head: RestTuple, ...tail: RestTuple[]]>" + ] + }, + { + "pos": 1886, + "end": 1905, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string | Parsed<[...head: LeadingRestTuple[], tail: LeadingRestTuple]>" + ] + }, + { + "pos": 2323, + "end": 2342, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "123", + "string | DeepOptional<[...head: LeadingRestTuple[], tail: LeadingRestTuple]> | undefined" + ] + }, + { + "pos": 2404, + "end": 2420, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "undefined", + "string | Parsed" + ] + }, + { + "pos": 2867, + "end": 2882, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string | Parsed" + ] + }, + { + "pos": 3046, + "end": 3055, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string | Parsed<[Second]>" + ] + }, + { + "pos": 3142, + "end": 3157, + "code": 2589, + "category": 1, + "messageKey": "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589" + } + ] + ] + ], + "size": 6731 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/index.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/index.ts + + +Edit [2]:: no change + +tsgo +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +index.ts:7:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed'. + +7 value.items[0] = 123; +  ~~~~~~~~~~~~~~ + +index.ts:18:1 - error TS2542: Index signature in type 'Immutable' only permits reading. + +18 immutable[0] = "error"; +  ~~~~~~~~~~~~ + +index.ts:20:1 - error TS2322: Type 'undefined' is not assignable to type 'string | Parsed'. + +20 required[0] = undefined; +  ~~~~~~~~~~~ + +index.ts:41:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed<[Tuple]>'. + +41 tuple[0] = 123; +  ~~~~~~~~ + +index.ts:42:15 - error TS2540: Cannot assign to '0' because it is a read-only property. + +42 readonlyTuple[0] = "error"; +   ~ + +index.ts:44:1 - error TS2322: Type '123' is not assignable to type 'string | Parsed<[(OptionalTuple | undefined)?]> | undefined'. + +44 optionalTuple[0] = 123; +  ~~~~~~~~~~~~~~~~ + +index.ts:45:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed<[head: RestTuple, ...tail: RestTuple[]]>'. + +45 restTuple[1] = 123; +  ~~~~~~~~~~~~ + +index.ts:46:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed<[...head: LeadingRestTuple[], tail: LeadingRestTuple]>'. + +46 leadingRestTuple[0] = 123; +  ~~~~~~~~~~~~~~~~~~~ + +index.ts:54:1 - error TS2322: Type '123' is not assignable to type 'string | DeepOptional<[...head: LeadingRestTuple[], tail: LeadingRestTuple]> | undefined'. + +54 deepOptionalRest[0] = 123; +  ~~~~~~~~~~~~~~~~~~~ + +index.ts:56:1 - error TS2322: Type 'undefined' is not assignable to type 'string | Parsed'. + +56 requiredTuple[0] = undefined; +  ~~~~~~~~~~~~~~~~ + +index.ts:64:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed'. + +64 intersection[0] = 123; +  ~~~~~~~~~~~~~~~ + +index.ts:69:1 - error TS2322: Type 'number' is not assignable to type 'string | Parsed<[Second]>'. + +69 mutual[0] = 123; +  ~~~~~~~~~ + +index.ts:71:23 - error TS2589: Type instantiation is excessively deep and possibly infinite. + +71 type NonTerminating = Endless; +   ~~~~~~~~~~~~~~~ + + +Found 13 errors in the same file, starting at: index.ts:7 + + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: diff --git a/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-tuple-leading-rest-after-comment-only-edit.js b/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-tuple-leading-rest-after-comment-only-edit.js new file mode 100644 index 0000000000000..8cda631de8907 --- /dev/null +++ b/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-tuple-leading-rest-after-comment-only-edit.js @@ -0,0 +1,264 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: +//// [/home/src/tslibs/TS/Lib/lib.es2025.full.d.ts] *new* +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray { readonly length: number; readonly [n: number]: T; } +interface SymbolConstructor { + (desc?: string | number): symbol; + for(name: string): symbol; + readonly toStringTag: symbol; +} +declare var Symbol: SymbolConstructor; +interface Symbol { + readonly [Symbol.toStringTag]: string; +} +declare const console: { log(msg: any): void; }; +//// [/home/src/workspaces/project/repro.ts] *new* +type Json = string | [...head: Json[], tail: Json]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: null as unknown as Json }); +//// [/home/src/workspaces/project/tsconfig.json] *new* +{"compilerOptions": {"strict": true, "noEmit": true, "incremental": true}} + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"84b8da980aec459bbd9105a47c921276-type Json = string | [...head: Json[], tail: Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });"],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "84b8da980aec459bbd9105a47c921276-type Json = string | [...head: Json[], tail: Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });", + "signature": "84b8da980aec459bbd9105a47c921276-type Json = string | [...head: Json[], tail: Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });", + "impliedNodeFormat": "CommonJS" + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1254 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: + + +Edit [0]:: add a comment +//// [/home/src/workspaces/project/repro.ts] *modified* +type Json = string | [...head: Json[], tail: Json]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: null as unknown as Json }); +// comment-only edit + + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f77c842c6db42aef644d5ee73fb4a551-type Json = string | [...head: Json[], tail: Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n","signature":"34423817737739fa18f175dd272596b0-type Json = string | [...head: Json[], tail: Json];\nexport declare const value: {\n items: Json;\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "f77c842c6db42aef644d5ee73fb4a551-type Json = string | [...head: Json[], tail: Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n", + "signature": "34423817737739fa18f175dd272596b0-type Json = string | [...head: Json[], tail: Json];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "f77c842c6db42aef644d5ee73fb4a551-type Json = string | [...head: Json[], tail: Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n", + "signature": "34423817737739fa18f175dd272596b0-type Json = string | [...head: Json[], tail: Json];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1478 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/repro.ts + + +Edit [1]:: no change + +tsgo +ExitStatus:: Success +Output:: + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: + + +Edit [2]:: add another comment +//// [/home/src/workspaces/project/repro.ts] *modified* +type Json = string | [...head: Json[], tail: Json]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: null as unknown as Json }); +// comment-only edit + +// another comment + + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"64329bca3e5a91f73cf71f40fc4d4c50-type Json = string | [...head: Json[], tail: Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n\n// another comment\n","signature":"34423817737739fa18f175dd272596b0-type Json = string | [...head: Json[], tail: Json];\nexport declare const value: {\n items: Json;\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "64329bca3e5a91f73cf71f40fc4d4c50-type Json = string | [...head: Json[], tail: Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n\n// another comment\n", + "signature": "34423817737739fa18f175dd272596b0-type Json = string | [...head: Json[], tail: Json];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "64329bca3e5a91f73cf71f40fc4d4c50-type Json = string | [...head: Json[], tail: Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n\n// another comment\n", + "signature": "34423817737739fa18f175dd272596b0-type Json = string | [...head: Json[], tail: Json];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1500 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/repro.ts + + +Edit [3]:: no change + +tsgo +ExitStatus:: Success +Output:: + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: diff --git a/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-tuple-optional-after-comment-only-edit.js b/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-tuple-optional-after-comment-only-edit.js new file mode 100644 index 0000000000000..426ede7af7bcf --- /dev/null +++ b/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-tuple-optional-after-comment-only-edit.js @@ -0,0 +1,264 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: +//// [/home/src/tslibs/TS/Lib/lib.es2025.full.d.ts] *new* +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray { readonly length: number; readonly [n: number]: T; } +interface SymbolConstructor { + (desc?: string | number): symbol; + for(name: string): symbol; + readonly toStringTag: symbol; +} +declare var Symbol: SymbolConstructor; +interface Symbol { + readonly [Symbol.toStringTag]: string; +} +declare const console: { log(msg: any): void; }; +//// [/home/src/workspaces/project/repro.ts] *new* +type Json = string | [Json?]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: null as unknown as Json }); +//// [/home/src/workspaces/project/tsconfig.json] *new* +{"compilerOptions": {"strict": true, "noEmit": true, "incremental": true}} + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"7bdaf46b597ea9a570b92a0947850c79-type Json = string | [Json?];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });"],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "7bdaf46b597ea9a570b92a0947850c79-type Json = string | [Json?];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });", + "signature": "7bdaf46b597ea9a570b92a0947850c79-type Json = string | [Json?];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });", + "impliedNodeFormat": "CommonJS" + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1232 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: + + +Edit [0]:: add a comment +//// [/home/src/workspaces/project/repro.ts] *modified* +type Json = string | [Json?]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: null as unknown as Json }); +// comment-only edit + + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"cc6eb527a2290ba41d20ab493c7c9a5c-type Json = string | [Json?];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n","signature":"41a5109640beb2f94bac6d2cc131aa2a-type Json = string | [Json?];\nexport declare const value: {\n items: Json;\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "cc6eb527a2290ba41d20ab493c7c9a5c-type Json = string | [Json?];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n", + "signature": "41a5109640beb2f94bac6d2cc131aa2a-type Json = string | [Json?];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "cc6eb527a2290ba41d20ab493c7c9a5c-type Json = string | [Json?];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n", + "signature": "41a5109640beb2f94bac6d2cc131aa2a-type Json = string | [Json?];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1434 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/repro.ts + + +Edit [1]:: no change + +tsgo +ExitStatus:: Success +Output:: + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: + + +Edit [2]:: add another comment +//// [/home/src/workspaces/project/repro.ts] *modified* +type Json = string | [Json?]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: null as unknown as Json }); +// comment-only edit + +// another comment + + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"953a0977233f8f54c559da199b4a7b54-type Json = string | [Json?];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n\n// another comment\n","signature":"41a5109640beb2f94bac6d2cc131aa2a-type Json = string | [Json?];\nexport declare const value: {\n items: Json;\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "953a0977233f8f54c559da199b4a7b54-type Json = string | [Json?];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n\n// another comment\n", + "signature": "41a5109640beb2f94bac6d2cc131aa2a-type Json = string | [Json?];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "953a0977233f8f54c559da199b4a7b54-type Json = string | [Json?];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n\n// another comment\n", + "signature": "41a5109640beb2f94bac6d2cc131aa2a-type Json = string | [Json?];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1456 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/repro.ts + + +Edit [3]:: no change + +tsgo +ExitStatus:: Success +Output:: + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: diff --git a/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-tuple-readonly-after-comment-only-edit.js b/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-tuple-readonly-after-comment-only-edit.js new file mode 100644 index 0000000000000..6796d0e9c1db9 --- /dev/null +++ b/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-tuple-readonly-after-comment-only-edit.js @@ -0,0 +1,264 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: +//// [/home/src/tslibs/TS/Lib/lib.es2025.full.d.ts] *new* +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray { readonly length: number; readonly [n: number]: T; } +interface SymbolConstructor { + (desc?: string | number): symbol; + for(name: string): symbol; + readonly toStringTag: symbol; +} +declare var Symbol: SymbolConstructor; +interface Symbol { + readonly [Symbol.toStringTag]: string; +} +declare const console: { log(msg: any): void; }; +//// [/home/src/workspaces/project/repro.ts] *new* +type Json = string | readonly [Json]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: null as unknown as Json }); +//// [/home/src/workspaces/project/tsconfig.json] *new* +{"compilerOptions": {"strict": true, "noEmit": true, "incremental": true}} + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"718eb10aef6486cea25710beddecaa05-type Json = string | readonly [Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });"],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "718eb10aef6486cea25710beddecaa05-type Json = string | readonly [Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });", + "signature": "718eb10aef6486cea25710beddecaa05-type Json = string | readonly [Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });", + "impliedNodeFormat": "CommonJS" + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1240 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: + + +Edit [0]:: add a comment +//// [/home/src/workspaces/project/repro.ts] *modified* +type Json = string | readonly [Json]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: null as unknown as Json }); +// comment-only edit + + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"344e69a90d2cf0ab824957141ca67014-type Json = string | readonly [Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n","signature":"b52bd8d0905c67e4d4c2a1cf19cc0483-type Json = string | readonly [Json];\nexport declare const value: {\n items: Json;\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "344e69a90d2cf0ab824957141ca67014-type Json = string | readonly [Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n", + "signature": "b52bd8d0905c67e4d4c2a1cf19cc0483-type Json = string | readonly [Json];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "344e69a90d2cf0ab824957141ca67014-type Json = string | readonly [Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n", + "signature": "b52bd8d0905c67e4d4c2a1cf19cc0483-type Json = string | readonly [Json];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1450 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/repro.ts + + +Edit [1]:: no change + +tsgo +ExitStatus:: Success +Output:: + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: + + +Edit [2]:: add another comment +//// [/home/src/workspaces/project/repro.ts] *modified* +type Json = string | readonly [Json]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: null as unknown as Json }); +// comment-only edit + +// another comment + + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4d105f43f7f34f1142cf18a2ccbd4b01-type Json = string | readonly [Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n\n// another comment\n","signature":"b52bd8d0905c67e4d4c2a1cf19cc0483-type Json = string | readonly [Json];\nexport declare const value: {\n items: Json;\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "4d105f43f7f34f1142cf18a2ccbd4b01-type Json = string | readonly [Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n\n// another comment\n", + "signature": "b52bd8d0905c67e4d4c2a1cf19cc0483-type Json = string | readonly [Json];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "4d105f43f7f34f1142cf18a2ccbd4b01-type Json = string | readonly [Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n\n// another comment\n", + "signature": "b52bd8d0905c67e4d4c2a1cf19cc0483-type Json = string | readonly [Json];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1472 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/repro.ts + + +Edit [3]:: no change + +tsgo +ExitStatus:: Success +Output:: + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: diff --git a/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-tuple-required-after-comment-only-edit.js b/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-tuple-required-after-comment-only-edit.js new file mode 100644 index 0000000000000..6a96671f48199 --- /dev/null +++ b/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-tuple-required-after-comment-only-edit.js @@ -0,0 +1,264 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: +//// [/home/src/tslibs/TS/Lib/lib.es2025.full.d.ts] *new* +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray { readonly length: number; readonly [n: number]: T; } +interface SymbolConstructor { + (desc?: string | number): symbol; + for(name: string): symbol; + readonly toStringTag: symbol; +} +declare var Symbol: SymbolConstructor; +interface Symbol { + readonly [Symbol.toStringTag]: string; +} +declare const console: { log(msg: any): void; }; +//// [/home/src/workspaces/project/repro.ts] *new* +type Json = string | [Json]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: null as unknown as Json }); +//// [/home/src/workspaces/project/tsconfig.json] *new* +{"compilerOptions": {"strict": true, "noEmit": true, "incremental": true}} + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"7c4643636fea5a3fa3934184ad313a78-type Json = string | [Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });"],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "7c4643636fea5a3fa3934184ad313a78-type Json = string | [Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });", + "signature": "7c4643636fea5a3fa3934184ad313a78-type Json = string | [Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });", + "impliedNodeFormat": "CommonJS" + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1231 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: + + +Edit [0]:: add a comment +//// [/home/src/workspaces/project/repro.ts] *modified* +type Json = string | [Json]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: null as unknown as Json }); +// comment-only edit + + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b52559a240e8d39c718249304ae8842e-type Json = string | [Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n","signature":"8230facf31e82d0ba4bc0b786c67a843-type Json = string | [Json];\nexport declare const value: {\n items: Json;\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "b52559a240e8d39c718249304ae8842e-type Json = string | [Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n", + "signature": "8230facf31e82d0ba4bc0b786c67a843-type Json = string | [Json];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "b52559a240e8d39c718249304ae8842e-type Json = string | [Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n", + "signature": "8230facf31e82d0ba4bc0b786c67a843-type Json = string | [Json];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1432 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/repro.ts + + +Edit [1]:: no change + +tsgo +ExitStatus:: Success +Output:: + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: + + +Edit [2]:: add another comment +//// [/home/src/workspaces/project/repro.ts] *modified* +type Json = string | [Json]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: null as unknown as Json }); +// comment-only edit + +// another comment + + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"e87de7e5304d0f24945682533549aafe-type Json = string | [Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n\n// another comment\n","signature":"8230facf31e82d0ba4bc0b786c67a843-type Json = string | [Json];\nexport declare const value: {\n items: Json;\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "e87de7e5304d0f24945682533549aafe-type Json = string | [Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n\n// another comment\n", + "signature": "8230facf31e82d0ba4bc0b786c67a843-type Json = string | [Json];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "e87de7e5304d0f24945682533549aafe-type Json = string | [Json];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n\n// another comment\n", + "signature": "8230facf31e82d0ba4bc0b786c67a843-type Json = string | [Json];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1454 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/repro.ts + + +Edit [3]:: no change + +tsgo +ExitStatus:: Success +Output:: + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: diff --git a/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-tuple-rest-after-comment-only-edit.js b/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-tuple-rest-after-comment-only-edit.js new file mode 100644 index 0000000000000..b8299c3dc5a32 --- /dev/null +++ b/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-tuple-rest-after-comment-only-edit.js @@ -0,0 +1,264 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: +//// [/home/src/tslibs/TS/Lib/lib.es2025.full.d.ts] *new* +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray { readonly length: number; readonly [n: number]: T; } +interface SymbolConstructor { + (desc?: string | number): symbol; + for(name: string): symbol; + readonly toStringTag: symbol; +} +declare var Symbol: SymbolConstructor; +interface Symbol { + readonly [Symbol.toStringTag]: string; +} +declare const console: { log(msg: any): void; }; +//// [/home/src/workspaces/project/repro.ts] *new* +type Json = string | [head: Json, ...tail: Json[]]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: null as unknown as Json }); +//// [/home/src/workspaces/project/tsconfig.json] *new* +{"compilerOptions": {"strict": true, "noEmit": true, "incremental": true}} + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"816e06372946805a052f2c848dc4283c-type Json = string | [head: Json, ...tail: Json[]];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });"],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "816e06372946805a052f2c848dc4283c-type Json = string | [head: Json, ...tail: Json[]];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });", + "signature": "816e06372946805a052f2c848dc4283c-type Json = string | [head: Json, ...tail: Json[]];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });", + "impliedNodeFormat": "CommonJS" + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1254 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: + + +Edit [0]:: add a comment +//// [/home/src/workspaces/project/repro.ts] *modified* +type Json = string | [head: Json, ...tail: Json[]]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: null as unknown as Json }); +// comment-only edit + + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4ff89af4a659ae4df528674de9a0894f-type Json = string | [head: Json, ...tail: Json[]];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n","signature":"54477de0477f8c7ca9d1f417637603aa-type Json = string | [head: Json, ...tail: Json[]];\nexport declare const value: {\n items: Json;\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "4ff89af4a659ae4df528674de9a0894f-type Json = string | [head: Json, ...tail: Json[]];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n", + "signature": "54477de0477f8c7ca9d1f417637603aa-type Json = string | [head: Json, ...tail: Json[]];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "4ff89af4a659ae4df528674de9a0894f-type Json = string | [head: Json, ...tail: Json[]];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n", + "signature": "54477de0477f8c7ca9d1f417637603aa-type Json = string | [head: Json, ...tail: Json[]];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1478 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/repro.ts + + +Edit [1]:: no change + +tsgo +ExitStatus:: Success +Output:: + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: + + +Edit [2]:: add another comment +//// [/home/src/workspaces/project/repro.ts] *modified* +type Json = string | [head: Json, ...tail: Json[]]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: null as unknown as Json }); +// comment-only edit + +// another comment + + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ded8da7851648e3326dc8d68f8b771f5-type Json = string | [head: Json, ...tail: Json[]];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n\n// another comment\n","signature":"54477de0477f8c7ca9d1f417637603aa-type Json = string | [head: Json, ...tail: Json[]];\nexport declare const value: {\n items: Json;\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "ded8da7851648e3326dc8d68f8b771f5-type Json = string | [head: Json, ...tail: Json[]];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n\n// another comment\n", + "signature": "54477de0477f8c7ca9d1f417637603aa-type Json = string | [head: Json, ...tail: Json[]];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "ded8da7851648e3326dc8d68f8b771f5-type Json = string | [head: Json, ...tail: Json[]];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: null as unknown as Json });\n// comment-only edit\n\n// another comment\n", + "signature": "54477de0477f8c7ca9d1f417637603aa-type Json = string | [head: Json, ...tail: Json[]];\nexport declare const value: {\n items: Json;\n};\nexport {};\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1500 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/repro.ts + + +Edit [3]:: no change + +tsgo +ExitStatus:: Success +Output:: + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: diff --git a/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-type-after-comment-only-edit.js b/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-type-after-comment-only-edit.js new file mode 100644 index 0000000000000..141fdec9e9880 --- /dev/null +++ b/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-type-after-comment-only-edit.js @@ -0,0 +1,264 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: +//// [/home/src/tslibs/TS/Lib/lib.es2025.full.d.ts] *new* +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray { readonly length: number; readonly [n: number]: T; } +interface SymbolConstructor { + (desc?: string | number): symbol; + for(name: string): symbol; + readonly toStringTag: symbol; +} +declare var Symbol: SymbolConstructor; +interface Symbol { + readonly [Symbol.toStringTag]: string; +} +declare const console: { log(msg: any): void; }; +//// [/home/src/workspaces/project/repro.ts] *new* +type Json = string | Json[]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: [] as Json[] }); +//// [/home/src/workspaces/project/tsconfig.json] *new* +{"compilerOptions": {"strict": true, "noEmit": true, "incremental": true}} + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"3f24abe1dc43308e4499e42c9bbbb9bd-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });"],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "3f24abe1dc43308e4499e42c9bbbb9bd-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });", + "signature": "3f24abe1dc43308e4499e42c9bbbb9bd-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });", + "impliedNodeFormat": "CommonJS" + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1220 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: + + +Edit [0]:: add a comment +//// [/home/src/workspaces/project/repro.ts] *modified* +type Json = string | Json[]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: [] as Json[] }); +// comment-only edit + + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"05e6c83fc809e0d08962e5b3425da798-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n","signature":"fcde39c2b051f56c2bdf4ff787c0b50e-type Json = string | Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "05e6c83fc809e0d08962e5b3425da798-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n", + "signature": "fcde39c2b051f56c2bdf4ff787c0b50e-type Json = string | Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "05e6c83fc809e0d08962e5b3425da798-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n", + "signature": "fcde39c2b051f56c2bdf4ff787c0b50e-type Json = string | Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1513 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/repro.ts + + +Edit [1]:: no change + +tsgo +ExitStatus:: Success +Output:: + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: + + +Edit [2]:: add another comment +//// [/home/src/workspaces/project/repro.ts] *modified* +type Json = string | Json[]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: [] as Json[] }); +// comment-only edit + +// another comment + + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"989f15878b40fd4e572d65e47a8cc845-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n\n// another comment\n","signature":"fcde39c2b051f56c2bdf4ff787c0b50e-type Json = string | Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "989f15878b40fd4e572d65e47a8cc845-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n\n// another comment\n", + "signature": "fcde39c2b051f56c2bdf4ff787c0b50e-type Json = string | Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "989f15878b40fd4e572d65e47a8cc845-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n\n// another comment\n", + "signature": "fcde39c2b051f56c2bdf4ff787c0b50e-type Json = string | Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1535 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/repro.ts + + +Edit [3]:: no change + +tsgo +ExitStatus:: Success +Output:: + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: diff --git a/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-type-consumer-after-comment-only-edit.js b/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-type-consumer-after-comment-only-edit.js new file mode 100644 index 0000000000000..4992d8b62f1c7 --- /dev/null +++ b/tsc/testdata/baselines/reference/tsc/incremental/recursive-mapped-type-consumer-after-comment-only-edit.js @@ -0,0 +1,435 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: +//// [/home/src/tslibs/TS/Lib/lib.es2025.full.d.ts] *new* +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray { readonly length: number; readonly [n: number]: T; } +interface SymbolConstructor { + (desc?: string | number): symbol; + for(name: string): symbol; + readonly toStringTag: symbol; +} +declare var Symbol: SymbolConstructor; +interface Symbol { + readonly [Symbol.toStringTag]: string; +} +declare const console: { log(msg: any): void; }; +//// [/home/src/workspaces/project/a.ts] *new* +type Json = string | Json[]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: [] as Json[] }); +//// [/home/src/workspaces/project/b.ts] *new* +import { value } from "./a"; +export const n: number = value.items; +//// [/home/src/workspaces/project/tsconfig.json] *new* +{"compilerOptions": {"strict": true, "noEmit": true, "incremental": true}} + +tsgo +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +b.ts:2:14 - error TS2322: Type 'Parsed' is not assignable to type 'number'. + +2 export const n: number = value.items; +   ~ + + +Found 1 error in b.ts:2 + +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2025.full.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"3f24abe1dc43308e4499e42c9bbbb9bd-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });","3664d7db9751b354c0abbbd215c8689c-import { value } from \"./a\";\nexport const n: number = value.items;"],"fileIdsList":[[2]],"options":{"strict":true},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":42,"end":43,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["Parsed","number"]}]]],"affectedFilesPendingEmit":[2,3]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./a.ts", + "./b.ts" + ], + "original": [ + 2, + 3 + ] + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./a.ts", + "./b.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./a.ts", + "version": "3f24abe1dc43308e4499e42c9bbbb9bd-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });", + "signature": "3f24abe1dc43308e4499e42c9bbbb9bd-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./b.ts", + "version": "3664d7db9751b354c0abbbd215c8689c-import { value } from \"./a\";\nexport const n: number = value.items;", + "signature": "3664d7db9751b354c0abbbd215c8689c-import { value } from \"./a\";\nexport const n: number = value.items;", + "impliedNodeFormat": "CommonJS" + } + ], + "fileIdsList": [ + [ + "./a.ts" + ] + ], + "options": { + "strict": true + }, + "referencedMap": { + "./b.ts": [ + "./a.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + [ + "./b.ts", + [ + { + "pos": 42, + "end": 43, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "Parsed", + "number" + ] + } + ] + ] + ], + "affectedFilesPendingEmit": [ + [ + "./a.ts", + "Js", + 2 + ], + [ + "./b.ts", + "Js", + 3 + ] + ], + "size": 1559 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/a.ts +*refresh* /home/src/workspaces/project/b.ts +Signatures:: + + +Edit [0]:: add a comment to the producer +//// [/home/src/workspaces/project/a.ts] *modified* +type Json = string | Json[]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: [] as Json[] }); +// comment-only edit + + +tsgo +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +b.ts:2:14 - error TS2322: Type 'Parsed' is not assignable to type 'number'. + +2 export const n: number = value.items; +   ~ + + +Found 1 error in b.ts:2 + +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2025.full.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"05e6c83fc809e0d08962e5b3425da798-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n","signature":"fcde39c2b051f56c2bdf4ff787c0b50e-type Json = string | Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n","impliedNodeFormat":1},{"version":"3664d7db9751b354c0abbbd215c8689c-import { value } from \"./a\";\nexport const n: number = value.items;","signature":"3d01ec51536810851f52ebd881c4789f-export declare const n: number;\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"strict":true},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":42,"end":43,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["Parsed","number"]}]]],"affectedFilesPendingEmit":[2,3]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./a.ts", + "./b.ts" + ], + "original": [ + 2, + 3 + ] + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./a.ts", + "./b.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./a.ts", + "version": "05e6c83fc809e0d08962e5b3425da798-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n", + "signature": "fcde39c2b051f56c2bdf4ff787c0b50e-type Json = string | Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "05e6c83fc809e0d08962e5b3425da798-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n", + "signature": "fcde39c2b051f56c2bdf4ff787c0b50e-type Json = string | Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./b.ts", + "version": "3664d7db9751b354c0abbbd215c8689c-import { value } from \"./a\";\nexport const n: number = value.items;", + "signature": "3d01ec51536810851f52ebd881c4789f-export declare const n: number;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "3664d7db9751b354c0abbbd215c8689c-import { value } from \"./a\";\nexport const n: number = value.items;", + "signature": "3d01ec51536810851f52ebd881c4789f-export declare const n: number;\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "./a.ts" + ] + ], + "options": { + "strict": true + }, + "referencedMap": { + "./b.ts": [ + "./a.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + [ + "./b.ts", + [ + { + "pos": 42, + "end": 43, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "Parsed", + "number" + ] + } + ] + ] + ], + "affectedFilesPendingEmit": [ + [ + "./a.ts", + "Js", + 2 + ], + [ + "./b.ts", + "Js", + 3 + ] + ], + "size": 1967 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/a.ts +*refresh* /home/src/workspaces/project/b.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/a.ts +(computed .d.ts) /home/src/workspaces/project/b.ts + + +Edit [1]:: no change + +tsgo +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +b.ts:2:14 - error TS2322: Type 'Parsed' is not assignable to type 'number'. + +2 export const n: number = value.items; +   ~ + + +Found 1 error in b.ts:2 + + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: + + +Edit [2]:: no change + +tsgo +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +b.ts:2:14 - error TS2322: Type 'Parsed' is not assignable to type 'number'. + +2 export const n: number = value.items; +   ~ + + +Found 1 error in b.ts:2 + + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: + + +Edit [3]:: delete build info and check the edited source afresh +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *deleted* + +tsgo +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +b.ts:2:14 - error TS2322: Type 'Parsed' is not assignable to type 'number'. + +2 export const n: number = value.items; +   ~ + + +Found 1 error in b.ts:2 + +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2025.full.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"05e6c83fc809e0d08962e5b3425da798-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n","3664d7db9751b354c0abbbd215c8689c-import { value } from \"./a\";\nexport const n: number = value.items;"],"fileIdsList":[[2]],"options":{"strict":true},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":42,"end":43,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["Parsed","number"]}]]],"affectedFilesPendingEmit":[2,3]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./a.ts", + "./b.ts" + ], + "original": [ + 2, + 3 + ] + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./a.ts", + "./b.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./a.ts", + "version": "05e6c83fc809e0d08962e5b3425da798-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n", + "signature": "05e6c83fc809e0d08962e5b3425da798-type Json = string | Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as Json[] });\n// comment-only edit\n", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./b.ts", + "version": "3664d7db9751b354c0abbbd215c8689c-import { value } from \"./a\";\nexport const n: number = value.items;", + "signature": "3664d7db9751b354c0abbbd215c8689c-import { value } from \"./a\";\nexport const n: number = value.items;", + "impliedNodeFormat": "CommonJS" + } + ], + "fileIdsList": [ + [ + "./a.ts" + ] + ], + "options": { + "strict": true + }, + "referencedMap": { + "./b.ts": [ + "./a.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + [ + "./b.ts", + [ + { + "pos": 42, + "end": 43, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "Parsed", + "number" + ] + } + ] + ] + ], + "affectedFilesPendingEmit": [ + [ + "./a.ts", + "Js", + 2 + ], + [ + "./b.ts", + "Js", + 3 + ] + ], + "size": 1583 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/a.ts +*refresh* /home/src/workspaces/project/b.ts +Signatures:: diff --git a/tsc/testdata/baselines/reference/tsc/incremental/recursive-readonly-mapped-type-after-comment-only-edit.js b/tsc/testdata/baselines/reference/tsc/incremental/recursive-readonly-mapped-type-after-comment-only-edit.js new file mode 100644 index 0000000000000..39b2aff71836b --- /dev/null +++ b/tsc/testdata/baselines/reference/tsc/incremental/recursive-readonly-mapped-type-after-comment-only-edit.js @@ -0,0 +1,264 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: +//// [/home/src/tslibs/TS/Lib/lib.es2025.full.d.ts] *new* +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray { readonly length: number; readonly [n: number]: T; } +interface SymbolConstructor { + (desc?: string | number): symbol; + for(name: string): symbol; + readonly toStringTag: symbol; +} +declare var Symbol: SymbolConstructor; +interface Symbol { + readonly [Symbol.toStringTag]: string; +} +declare const console: { log(msg: any): void; }; +//// [/home/src/workspaces/project/repro.ts] *new* +type Json = string | readonly Json[]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: [] as readonly Json[] }); +//// [/home/src/workspaces/project/tsconfig.json] *new* +{"compilerOptions": {"strict": true, "noEmit": true, "incremental": true}} + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"388a4e7f7405ee8d56586c842c13969c-type Json = string | readonly Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as readonly Json[] });"],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "388a4e7f7405ee8d56586c842c13969c-type Json = string | readonly Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as readonly Json[] });", + "signature": "388a4e7f7405ee8d56586c842c13969c-type Json = string | readonly Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as readonly Json[] });", + "impliedNodeFormat": "CommonJS" + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1238 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: + + +Edit [0]:: add a comment +//// [/home/src/workspaces/project/repro.ts] *modified* +type Json = string | readonly Json[]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: [] as readonly Json[] }); +// comment-only edit + + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"44adeee334483dab0e3927db949cf78a-type Json = string | readonly Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as readonly Json[] });\n// comment-only edit\n","signature":"b792b2ba74c60b37d0b658d525de6379-type Json = string | readonly Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "44adeee334483dab0e3927db949cf78a-type Json = string | readonly Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as readonly Json[] });\n// comment-only edit\n", + "signature": "b792b2ba74c60b37d0b658d525de6379-type Json = string | readonly Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "44adeee334483dab0e3927db949cf78a-type Json = string | readonly Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as readonly Json[] });\n// comment-only edit\n", + "signature": "b792b2ba74c60b37d0b658d525de6379-type Json = string | readonly Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1549 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/repro.ts + + +Edit [1]:: no change + +tsgo +ExitStatus:: Success +Output:: + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: + + +Edit [2]:: add another comment +//// [/home/src/workspaces/project/repro.ts] *modified* +type Json = string | readonly Json[]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: [] as readonly Json[] }); +// comment-only edit + +// another comment + + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","./repro.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"123beaefc70ba63a9447b94fb12d09b5-type Json = string | readonly Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as readonly Json[] });\n// comment-only edit\n\n// another comment\n","signature":"b792b2ba74c60b37d0b658d525de6379-type Json = string | readonly Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n","impliedNodeFormat":1}],"options":{"strict":true},"affectedFilesPendingEmit":[2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./repro.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./repro.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./repro.ts", + "version": "123beaefc70ba63a9447b94fb12d09b5-type Json = string | readonly Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as readonly Json[] });\n// comment-only edit\n\n// another comment\n", + "signature": "b792b2ba74c60b37d0b658d525de6379-type Json = string | readonly Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "123beaefc70ba63a9447b94fb12d09b5-type Json = string | readonly Json[];\ntype Parsed = T extends object ? { [K in keyof T]: Parsed } : T;\ndeclare function wrap(value: T): Parsed;\nexport const value = wrap({ items: [] as readonly Json[] });\n// comment-only edit\n\n// another comment\n", + "signature": "b792b2ba74c60b37d0b658d525de6379-type Json = string | readonly Json[];\ntype Parsed = T extends object ? {\n [K in keyof T]: Parsed;\n} : T;\nexport declare const value: {\n items: Parsed;\n};\nexport {};\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "strict": true + }, + "affectedFilesPendingEmit": [ + [ + "./repro.ts", + "Js", + 2 + ] + ], + "size": 1571 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/repro.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/repro.ts + + +Edit [3]:: no change + +tsgo +ExitStatus:: Success +Output:: + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: diff --git a/tsc/testdata/baselines/reference/tsc/incremental/recursive-tagged-tuple-after-incremental-edits.js b/tsc/testdata/baselines/reference/tsc/incremental/recursive-tagged-tuple-after-incremental-edits.js new file mode 100644 index 0000000000000..afb84088536d7 --- /dev/null +++ b/tsc/testdata/baselines/reference/tsc/incremental/recursive-tagged-tuple-after-incremental-edits.js @@ -0,0 +1,635 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: +//// [/home/src/tslibs/TS/Lib/lib.es2025.full.d.ts] *new* +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray { readonly length: number; readonly [n: number]: T; } +interface SymbolConstructor { + (desc?: string | number): symbol; + for(name: string): symbol; + readonly toStringTag: symbol; +} +declare var Symbol: SymbolConstructor; +interface Symbol { + readonly [Symbol.toStringTag]: string; +} +declare const console: { log(msg: any): void; }; +//// [/home/src/workspaces/project/consumer.ts] *new* +import { doc } from "./doc"; +export const value = doc; +//// [/home/src/workspaces/project/doc.ts] *new* +type Doc = + | string + | { [k: string]: Doc } + | readonly ["array", Doc] + | readonly ["array", Doc, { length: number }] + | readonly ["array", Doc, { min?: number; max?: number }] + | readonly ["union", Doc, ...Doc[]]; +export declare const doc: Doc; +//// [/home/src/workspaces/project/tsconfig.json] *new* +{"compilerOptions": {"strict": true, "incremental": true, "noEmit": true, "module": "esnext", "moduleResolution": "bundler"}} + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2025.full.d.ts","./doc.ts","./consumer.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"5fa9a45d6461d373d994072ba4b41eca-type Doc =\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;","e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;"],"fileIdsList":[[2]],"options":{"module":99,"strict":true},"referencedMap":[[3,1]],"affectedFilesPendingEmit":[3,2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./doc.ts", + "./consumer.ts" + ], + "original": [ + 2, + 3 + ] + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./doc.ts", + "./consumer.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./doc.ts", + "version": "5fa9a45d6461d373d994072ba4b41eca-type Doc =\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;", + "signature": "5fa9a45d6461d373d994072ba4b41eca-type Doc =\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./consumer.ts", + "version": "e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;", + "signature": "e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;", + "impliedNodeFormat": "CommonJS" + } + ], + "fileIdsList": [ + [ + "./doc.ts" + ] + ], + "options": { + "module": 99, + "strict": true + }, + "referencedMap": { + "./consumer.ts": [ + "./doc.ts" + ] + }, + "affectedFilesPendingEmit": [ + [ + "./consumer.ts", + "Js", + 3 + ], + [ + "./doc.ts", + "Js", + 2 + ] + ], + "size": 1464 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/doc.ts +*refresh* /home/src/workspaces/project/consumer.ts +Signatures:: + + +Edit [0]:: no change + +tsgo +ExitStatus:: Success +Output:: + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: + + +Edit [1]:: add a comment to the recursive type +//// [/home/src/workspaces/project/doc.ts] *modified* +type Doc = + | string + | { [k: string]: Doc } + | readonly ["array", Doc] + | readonly ["array", Doc, { length: number }] + | readonly ["array", Doc, { min?: number; max?: number }] + | readonly ["union", Doc, ...Doc[]]; +export declare const doc: Doc; +// comment-only edit + + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2025.full.d.ts","./doc.ts","./consumer.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"209790a380ab2edc475c402e3a85e110-type Doc =\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\n// comment-only edit\n","signature":"17befdf8983ce76b78c64e0ef9b49c73-type Doc = string | {\n [k: string]: Doc;\n} | readonly [\"array\", Doc] | readonly [\"array\", Doc, {\n length: number;\n}] | readonly [\"array\", Doc, {\n min?: number;\n max?: number;\n}] | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\nexport {};\n","impliedNodeFormat":1},{"version":"e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;","signature":"a56617d7ff45ff02880e982e94937f59-export declare const value: any;\n\n(42,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nvalue\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"module":99,"strict":true},"referencedMap":[[3,1]],"affectedFilesPendingEmit":[3,2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./doc.ts", + "./consumer.ts" + ], + "original": [ + 2, + 3 + ] + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./doc.ts", + "./consumer.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./doc.ts", + "version": "209790a380ab2edc475c402e3a85e110-type Doc =\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\n// comment-only edit\n", + "signature": "17befdf8983ce76b78c64e0ef9b49c73-type Doc = string | {\n [k: string]: Doc;\n} | readonly [\"array\", Doc] | readonly [\"array\", Doc, {\n length: number;\n}] | readonly [\"array\", Doc, {\n min?: number;\n max?: number;\n}] | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "209790a380ab2edc475c402e3a85e110-type Doc =\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\n// comment-only edit\n", + "signature": "17befdf8983ce76b78c64e0ef9b49c73-type Doc = string | {\n [k: string]: Doc;\n} | readonly [\"array\", Doc] | readonly [\"array\", Doc, {\n length: number;\n}] | readonly [\"array\", Doc, {\n min?: number;\n max?: number;\n}] | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\nexport {};\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./consumer.ts", + "version": "e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;", + "signature": "a56617d7ff45ff02880e982e94937f59-export declare const value: any;\n\n(42,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nvalue\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;", + "signature": "a56617d7ff45ff02880e982e94937f59-export declare const value: any;\n\n(42,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nvalue\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "./doc.ts" + ] + ], + "options": { + "module": 99, + "strict": true + }, + "referencedMap": { + "./consumer.ts": [ + "./doc.ts" + ] + }, + "affectedFilesPendingEmit": [ + [ + "./consumer.ts", + "Js", + 3 + ], + [ + "./doc.ts", + "Js", + 2 + ] + ], + "size": 2108 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/doc.ts +*refresh* /home/src/workspaces/project/consumer.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/doc.ts +(computed .d.ts) /home/src/workspaces/project/consumer.ts + + +Edit [2]:: no change + +tsgo +ExitStatus:: Success +Output:: + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: + + +Edit [3]:: add a union constituent +//// [/home/src/workspaces/project/doc.ts] *modified* +type Doc = + | number + | string + | { [k: string]: Doc } + | readonly ["array", Doc] + | readonly ["array", Doc, { length: number }] + | readonly ["array", Doc, { min?: number; max?: number }] + | readonly ["union", Doc, ...Doc[]]; +export declare const doc: Doc; +// comment-only edit + + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2025.full.d.ts","./doc.ts","./consumer.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"703658314ddb6e78faa0ecabe01e9319-type Doc =\n | number\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\n// comment-only edit\n","signature":"e0d759702454fa5818ea5747e4408ca8-type Doc = number | string | {\n [k: string]: Doc;\n} | readonly [\"array\", Doc] | readonly [\"array\", Doc, {\n length: number;\n}] | readonly [\"array\", Doc, {\n min?: number;\n max?: number;\n}] | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\nexport {};\n","impliedNodeFormat":1},{"version":"e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;","signature":"a56617d7ff45ff02880e982e94937f59-export declare const value: any;\n\n(42,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nvalue\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"module":99,"strict":true},"referencedMap":[[3,1]],"affectedFilesPendingEmit":[3,2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./doc.ts", + "./consumer.ts" + ], + "original": [ + 2, + 3 + ] + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./doc.ts", + "./consumer.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./doc.ts", + "version": "703658314ddb6e78faa0ecabe01e9319-type Doc =\n | number\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\n// comment-only edit\n", + "signature": "e0d759702454fa5818ea5747e4408ca8-type Doc = number | string | {\n [k: string]: Doc;\n} | readonly [\"array\", Doc] | readonly [\"array\", Doc, {\n length: number;\n}] | readonly [\"array\", Doc, {\n min?: number;\n max?: number;\n}] | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "703658314ddb6e78faa0ecabe01e9319-type Doc =\n | number\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\n// comment-only edit\n", + "signature": "e0d759702454fa5818ea5747e4408ca8-type Doc = number | string | {\n [k: string]: Doc;\n} | readonly [\"array\", Doc] | readonly [\"array\", Doc, {\n length: number;\n}] | readonly [\"array\", Doc, {\n min?: number;\n max?: number;\n}] | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\nexport {};\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./consumer.ts", + "version": "e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;", + "signature": "a56617d7ff45ff02880e982e94937f59-export declare const value: any;\n\n(42,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nvalue\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;", + "signature": "a56617d7ff45ff02880e982e94937f59-export declare const value: any;\n\n(42,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nvalue\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "./doc.ts" + ] + ], + "options": { + "module": 99, + "strict": true + }, + "referencedMap": { + "./consumer.ts": [ + "./doc.ts" + ] + }, + "affectedFilesPendingEmit": [ + [ + "./consumer.ts", + "Js", + 3 + ], + [ + "./doc.ts", + "Js", + 2 + ] + ], + "size": 2131 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/doc.ts +*refresh* /home/src/workspaces/project/consumer.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/doc.ts +(computed .d.ts) /home/src/workspaces/project/consumer.ts + + +Edit [4]:: no change + +tsgo +ExitStatus:: Success +Output:: + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: + + +Edit [5]:: delete build info and check the edited source afresh +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *deleted* + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2025.full.d.ts","./doc.ts","./consumer.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"703658314ddb6e78faa0ecabe01e9319-type Doc =\n | number\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\n// comment-only edit\n","e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;"],"fileIdsList":[[2]],"options":{"module":99,"strict":true},"referencedMap":[[3,1]],"affectedFilesPendingEmit":[3,2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./doc.ts", + "./consumer.ts" + ], + "original": [ + 2, + 3 + ] + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./doc.ts", + "./consumer.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./doc.ts", + "version": "703658314ddb6e78faa0ecabe01e9319-type Doc =\n | number\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\n// comment-only edit\n", + "signature": "703658314ddb6e78faa0ecabe01e9319-type Doc =\n | number\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\n// comment-only edit\n", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./consumer.ts", + "version": "e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;", + "signature": "e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;", + "impliedNodeFormat": "CommonJS" + } + ], + "fileIdsList": [ + [ + "./doc.ts" + ] + ], + "options": { + "module": 99, + "strict": true + }, + "referencedMap": { + "./consumer.ts": [ + "./doc.ts" + ] + }, + "affectedFilesPendingEmit": [ + [ + "./consumer.ts", + "Js", + 3 + ], + [ + "./doc.ts", + "Js", + 2 + ] + ], + "size": 1502 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2025.full.d.ts +*refresh* /home/src/workspaces/project/doc.ts +*refresh* /home/src/workspaces/project/consumer.ts +Signatures:: + + +Edit [6]:: verify the consumer type was not weakened +//// [/home/src/workspaces/project/consumer.ts] *modified* +import { doc } from "./doc"; +export const value = doc; +export const invalid: number = value; + + +tsgo +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +consumer.ts:3:14 - error TS2322: Type 'Doc' is not assignable to type 'number'. + Type 'string' is not assignable to type 'number'. + +3 export const invalid: number = value; +   ~~~~~~~ + + +Found 1 error in consumer.ts:3 + +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2025.full.d.ts","./doc.ts","./consumer.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"703658314ddb6e78faa0ecabe01e9319-type Doc =\n | number\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\n// comment-only edit\n",{"version":"8af491d326de0701fb4d07a415b35dec-import { doc } from \"./doc\";\nexport const value = doc;\nexport const invalid: number = value;\n","signature":"b0465247e2bd6863c6a086f723d673e8-export declare const value: any;\nexport declare const invalid: number;\n\n(42,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nvalue\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"module":99,"strict":true},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":68,"end":75,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["Doc","number"],"messageChain":[{"pos":68,"end":75,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]}]]],"affectedFilesPendingEmit":[3,2]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./doc.ts", + "./consumer.ts" + ], + "original": [ + 2, + 3 + ] + } + ], + "fileNames": [ + "lib.es2025.full.d.ts", + "./doc.ts", + "./consumer.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2025.full.d.ts", + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./doc.ts", + "version": "703658314ddb6e78faa0ecabe01e9319-type Doc =\n | number\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\n// comment-only edit\n", + "signature": "703658314ddb6e78faa0ecabe01e9319-type Doc =\n | number\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\n// comment-only edit\n", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./consumer.ts", + "version": "8af491d326de0701fb4d07a415b35dec-import { doc } from \"./doc\";\nexport const value = doc;\nexport const invalid: number = value;\n", + "signature": "b0465247e2bd6863c6a086f723d673e8-export declare const value: any;\nexport declare const invalid: number;\n\n(42,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nvalue\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8af491d326de0701fb4d07a415b35dec-import { doc } from \"./doc\";\nexport const value = doc;\nexport const invalid: number = value;\n", + "signature": "b0465247e2bd6863c6a086f723d673e8-export declare const value: any;\nexport declare const invalid: number;\n\n(42,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nvalue\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "./doc.ts" + ] + ], + "options": { + "module": 99, + "strict": true + }, + "referencedMap": { + "./consumer.ts": [ + "./doc.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + [ + "./consumer.ts", + [ + { + "pos": 68, + "end": 75, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "Doc", + "number" + ], + "messageChain": [ + { + "pos": 68, + "end": 75, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] + } + ] + } + ] + ] + ], + "affectedFilesPendingEmit": [ + [ + "./consumer.ts", + "Js", + 3 + ], + [ + "./doc.ts", + "Js", + 2 + ] + ], + "size": 2152 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/consumer.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/consumer.ts + + +Edit [7]:: no change + +tsgo +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +consumer.ts:3:14 - error TS2322: Type 'Doc' is not assignable to type 'number'. + Type 'string' is not assignable to type 'number'. + +3 export const invalid: number = value; +   ~~~~~~~ + + +Found 1 error in consumer.ts:3 + + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: diff --git a/tsc/testdata/tests/cases/compiler/declarationEmitUnserializableTypes.ts b/tsc/testdata/tests/cases/compiler/declarationEmitUnserializableTypes.ts new file mode 100644 index 0000000000000..5c68c978d9dcc --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/declarationEmitUnserializableTypes.ts @@ -0,0 +1,39 @@ +// @strict: true +// @declaration: true + +// @filename: local.ts +export function localArrow() { + const inner = () => inner; + return inner; +} +export function localDeclaration() { + function inner() { return inner; } + return inner; +} +export function localInstantiation() { + function inner(): typeof inner { return inner; } + return inner; +} +export const object = { + self() { return object; } +}; +export const annotatedObject: { self(): typeof annotatedObject } = { + self() { return annotatedObject; } +}; + +// @filename: growing.ts +export function grow(value: T) { + return { + value, + deeper: (next: U) => grow({ ...value, ...next }), + }; +} + +// @filename: annotatedLocal.ts +interface Recursive { + (): Recursive; +} +export function local(): Recursive { + const inner = () => inner; + return inner; +} diff --git a/tsc/testdata/tests/cases/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.ts b/tsc/testdata/tests/cases/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.ts index 205e720edd3e4..ad675059048f3 100644 --- a/tsc/testdata/tests/cases/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.ts +++ b/tsc/testdata/tests/cases/compiler/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.ts @@ -1,10 +1,10 @@ // @module: commonjs -// @target: es2015 +// @target: es2015 // @declaration: true // @lib: es6 -// Note that both of the following have an `any` in their return type from where we bottom out the type printout -// for having too many instances of the same symbol nesting. +// Both return types exceed the serializer's nesting limit. Declaration emit must report an error +// rather than silently replacing the remaining type with `any`. // Slightly simplified repro from https://github.com/microsoft/TypeScript/issues/30732 so it's easier to read and debug export type Key = keyof U; diff --git a/tsc/testdata/tests/cases/compiler/deferredMappedTypeAliasInstantiation.ts b/tsc/testdata/tests/cases/compiler/deferredMappedTypeAliasInstantiation.ts new file mode 100644 index 0000000000000..edb5405b62a0e --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/deferredMappedTypeAliasInstantiation.ts @@ -0,0 +1,19 @@ +// @strict: true +// @declaration: true + +type Json = string | Json[]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function direct(value: T): Parsed; +declare function indirect(value: U): { concrete: Parsed; recursive: Parsed; generic: Parsed }; +export const concrete = direct([] as string[]); +export const recursive = direct([] as Json[]); +export const instantiated = indirect(1); +const numeric: number[] = instantiated.generic; +instantiated.generic[0] = "error"; + +function generic(value: T) { + return indirect(value); +} +export const twice = generic(true); +const boolean: boolean[] = twice.generic; +twice.generic[0] = "error"; diff --git a/tsc/testdata/tests/cases/compiler/deferredMappedTypeCircularArguments.ts b/tsc/testdata/tests/cases/compiler/deferredMappedTypeCircularArguments.ts new file mode 100644 index 0000000000000..f1bd40b45a0fe --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/deferredMappedTypeCircularArguments.ts @@ -0,0 +1,12 @@ +// @strict: true +// @declaration: true + +// @filename: mapped.ts +export type M = { [K in keyof T]: T extends M ? 1 : 2 }; + +// @filename: usage.ts +import type { M } from "./mapped.js"; +declare const array: M; +declare const tuple: M<[string]>; +export const a = array[0]; +export const b = tuple[0]; diff --git a/tsc/testdata/tests/cases/compiler/deferredMappedTypeDeclarationDepth.ts b/tsc/testdata/tests/cases/compiler/deferredMappedTypeDeclarationDepth.ts new file mode 100644 index 0000000000000..be3c060e5f66f --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/deferredMappedTypeDeclarationDepth.ts @@ -0,0 +1,71 @@ +// @strict: true +// @declaration: true + +// @filename: growing.ts +export function tuple() { + type C = { [K in keyof T]: C<[T]> }; + return null as unknown as C<[number]>; +} + +export function array() { + type C = { [K in keyof T]: C }; + return null as unknown as C; +} + +export function changingTuple() { + type C = { [K in keyof T]: C }; + return null as unknown as C<[number], "">; +} + +export function changingArray() { + type C = { [K in keyof T]: C }; + return null as unknown as C; +} + +export function nestedContext() { + type C = { [K in keyof T]: C> }; + return null as unknown as C<[number], [number]>; +} + +// @filename: finite.ts +type Previous = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; + +export function array() { + type P = T extends object ? { [K in keyof T]: P } : T; + return null as unknown as P; +} + +export function tuple() { + type P = T extends object ? { [K in keyof T]: P } : T; + return null as unknown as P<[[[[[[[[[[[[[number]]]]]]]]]]]]]>; +} + +export function composedArray() { + type P = T extends object ? { [K in keyof T]: P } : T; + type Q = T extends object ? { [K in keyof T]: Q } : T; + return null as unknown as P>; +} + +export function composedTuple() { + type P = T extends object ? { [K in keyof T]: P } : T; + type Q = T extends object ? { [K in keyof T]: Q } : T; + return null as unknown as P>; +} + +export function boundedArray() { + type C = { [K in keyof T]: D extends 0 ? T[K] : C }; + return null as unknown as C; +} + +export function boundedTuple() { + type C = { [K in keyof T]: D extends 0 ? T[K] : C }; + return null as unknown as C<[number], 13>; +} + +interface Step { next: T } +type BuildChain = D extends 0 ? T : BuildChain>; + +export function boundedChain() { + type C = { [K in keyof T]: D extends Step ? C : T[K] }; + return null as unknown as C<[number], BuildChain<13>>; +} diff --git a/tsc/testdata/tests/cases/compiler/deferredMappedTypeRelations.ts b/tsc/testdata/tests/cases/compiler/deferredMappedTypeRelations.ts new file mode 100644 index 0000000000000..048910b31909e --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/deferredMappedTypeRelations.ts @@ -0,0 +1,57 @@ +// @strict: true + +type Deep = T extends object ? { [K in keyof T]: Deep } : T; +type DeepReadonly = T extends object ? { readonly [K in keyof T]: DeepReadonly } : T; + +declare const array: Deep; +const badArray: Deep = array; +const goodArray: Deep = array; + +declare const tuple: Deep<[[[[string]]]]>; +const badTuple: Deep<[[[[number]]]]> = tuple; +const goodTuple: Deep<[[[[string]]]]> = tuple; + +declare const readonlyArray: DeepReadonly; +const badReadonlyArray: DeepReadonly = readonlyArray; +const goodReadonlyArray: DeepReadonly = readonlyArray; + +declare const readonlyTuple: DeepReadonly<[[[[string]]]]>; +const badReadonlyTuple: DeepReadonly<[[[[number]]]]> = readonlyTuple; +const goodReadonlyTuple: DeepReadonly<[[[[string]]]]> = readonlyTuple; + +type AssertFalse = T; +type ArrayRelation = AssertFalse extends Deep ? true : false>; +type TupleRelation = AssertFalse extends Deep<[[[[number]]]]> ? true : false>; + +declare function infer(value: Deep<{ value: T }[][][][]>): T; +declare const nested: Deep<{ value: number }[][][][]>; +const inferred: number = infer(nested); +const badInferred: string = infer(nested); + +type Growing = { [K in keyof T]: Growing }; +declare const growing: Growing; +const sameStructure: Growing = growing; + +type Previous = [never, 0, 1, 2, 3, 4]; +type Nest = { [K in keyof T]: D extends 0 ? T[K] : Nest }; +declare const boundedArray: Nest; +const badBoundedArray: Nest = boundedArray; +const goodBoundedArray: Nest<(string | number)[], 4> = boundedArray; +declare const boundedTuple: Nest<[string], 4>; +const badBoundedTuple: Nest<[number], 4> = boundedTuple; +const goodBoundedTuple: Nest<[string | number], 4> = boundedTuple; +type BoundedRelation = AssertFalse extends Nest<[number], 4> ? true : false>; + +interface Step { next: T } +type BuildChain = D extends 0 ? T : BuildChain>; +type ChainNest = { [K in keyof T]: D extends Step ? ChainNest : T[K] }; +declare const chain: ChainNest<[string], BuildChain<4>>; +const badChain: ChainNest<[number], BuildChain<4>> = chain; +const goodChain: ChainNest<[string | number], BuildChain<4>> = chain; +type ChainRelation = AssertFalse> extends ChainNest<[number], BuildChain<4>> ? true : false>; + +type BuildArray = D extends 0 ? T : BuildArray; +declare const computedArray: Deep>; +const badComputedArray: Deep> = computedArray; +const goodComputedArray: Deep> = computedArray; +type ComputedRelation = AssertFalse> extends Deep> ? true : false>; diff --git a/tsc/testdata/tests/cases/compiler/mappedTupleInstantiationSharing.ts b/tsc/testdata/tests/cases/compiler/mappedTupleInstantiationSharing.ts new file mode 100644 index 0000000000000..dcfe3a6f792e8 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/mappedTupleInstantiationSharing.ts @@ -0,0 +1,10 @@ +// @strict: true + +type Select = { [K in keyof I]: T[I[K]] }; +interface Box { + value: T; + callback: (...args: T) => T; +} +type Boxes = Tag extends unknown ? Box> : never; +declare const boxes: Boxes<0 | 1 | 2 | 3 | 4 | 5 | 6 | 7>; +const result: [string] = boxes.callback("hello"); diff --git a/tsc/testdata/tests/cases/compiler/recursiveContainerDeclarationSerialization.ts b/tsc/testdata/tests/cases/compiler/recursiveContainerDeclarationSerialization.ts new file mode 100644 index 0000000000000..dc5b4d53d974d --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/recursiveContainerDeclarationSerialization.ts @@ -0,0 +1,32 @@ +// @strict: true +// @declaration: true + +// @filename: local.ts +export function array() { + type Recursive = Recursive[]; + return null as unknown as Recursive; +} +export function tuple() { + type Recursive = [Recursive]; + return null as unknown as Recursive; +} +export function readonlyTuple() { + type Recursive = readonly [Recursive]; + return null as unknown as Recursive; +} +export function union() { + type Recursive = string | Recursive[]; + return null as unknown as Recursive; +} + +// @filename: nameable.ts +export type RecursiveArray = RecursiveArray[]; +export type RecursiveTuple = readonly [RecursiveTuple]; +declare const array: RecursiveArray; +declare const tuple: RecursiveTuple; +export const namedArray = array; +export const namedTuple = tuple; +export function finite() { + type Nested = [[[[[[[[[[[[[number]]]]]]]]]]]]]; + return null as unknown as Nested; +} diff --git a/tsc/testdata/tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts b/tsc/testdata/tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts new file mode 100644 index 0000000000000..388d080fab115 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts @@ -0,0 +1,35 @@ +// @strict: true +// @declaration: true + +// @filename: script.ts +const scriptArrow = () => scriptArrow; +const scriptExpression = function () { return scriptExpression; }; +function scriptDeclaration() { return scriptDeclaration; } + +// @filename: exported.ts +export const arrow = () => arrow; +export const expression = function () { return expression; }; +export function declaration() { return declaration; } +export const annotated: () => typeof annotated = () => annotated; +export const first = () => second; +export const second = () => first; +export const generic = (value: T) => generic; +export const finite = () => () => 1; +export const wrapped = { arrow }; +export const tuple = [arrow] as const; +export const named = function self() { return self; }; +export const broad: unknown = function self() { return self; }; +export const contextual: () => unknown = function self() { return self; }; +export const specialized = generic; + +// @filename: consumer.ts +import { arrow, expression, declaration, first, generic, finite, wrapped, tuple } from "./exported"; +const a: typeof arrow = arrow()()(); +const b: typeof expression = expression()()(); +const c: typeof declaration = declaration()()(); +const d: typeof first = first()()(); +const e: typeof generic = generic(1)("text")(true); +const f: number = finite()(); +const g: typeof arrow = wrapped.arrow()(); +const h: typeof arrow = tuple[0]()(); +const invalid: number = arrow()()(); diff --git a/tsc/testdata/tests/cases/compiler/recursiveMappedArray.ts b/tsc/testdata/tests/cases/compiler/recursiveMappedArray.ts new file mode 100644 index 0000000000000..fba2434efedb3 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/recursiveMappedArray.ts @@ -0,0 +1,7 @@ +// @strict: true +// @declaration: true + +type Json = string | Json[]; +type Parsed = T extends object ? { [K in keyof T]: Parsed } : T; +declare function wrap(value: T): Parsed; +export const value = wrap({ items: [] as Json[] }); diff --git a/tsc/testdata/tests/cases/compiler/recursiveMappedTupleInstantiationSharing.ts b/tsc/testdata/tests/cases/compiler/recursiveMappedTupleInstantiationSharing.ts new file mode 100644 index 0000000000000..fddc2e91955a6 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/recursiveMappedTupleInstantiationSharing.ts @@ -0,0 +1,77 @@ +// @strict: true +// @declaration: true + +type Deep = T extends object ? { [K in keyof T]: Deep } : T; +type Json = string | [Json]; +declare function direct(value: T): Deep; +declare function indirect(value: T): { value: Deep<[T]> }; +export const concrete = direct([""] as [string]); +export const recursive = direct([] as unknown as [Json]); +export const generic = indirect(1); +generic.value[0] = "error"; +function wrap(value: T) { + return indirect(value); +} +export const twice = wrap(true); +twice.value[0] = "error"; + +type Left = [string, Right?]; +type Right = [number, Left?]; +export const mutual = direct([] as unknown as Left); +mutual[0] = 0; +mutual[1]![0] = ""; +mutual[1]![1]![0] = 0; + +type Grow = { [K in keyof T]: Grow<[T]> }; +export declare const growing: Grow<[string]>; +export const next = growing[0]; +export const again = next[0]; + +interface Box { + value: T; + self: this; + set(value: T): this; +} +declare const boxed: Box>; +export const boxedValue = boxed.value; +export const sameBox = boxed.set(boxed.value).self; +sameBox.value[0] = 0; +sameBox.value[1]![0] = ""; + +declare const growingBox: Box>; +export const boxedGrowing = growingBox.value; +export const boxedNext = boxedGrowing[0]; + +export function unbox(box: Box>) { + return box.value; +} +declare const numericBox: Box>; +export const unboxed = unbox(numericBox); +unboxed[0] = "error"; + +type ArrayJson = string | ArrayJson[]; +declare const arrayBox: Box>; +export const arrayValue = arrayBox.value; +arrayValue[0] = 0; +arrayValue.map(value => { + if (typeof value !== "string") { + value[0] = 0; + } +}); + +type GrowArray = { [K in keyof T]: GrowArray }; +declare const growingArrayBox: Box>; +export const growingArrayValue = growingArrayBox.value; +export const growingArrayNext = growingArrayValue[0]; +export const growingArrayAgain = growingArrayNext[0]; + +type DeepReadonly = T extends object ? { readonly [K in keyof T]: DeepReadonly } : T; +declare const readonlyBox: Box>; +export const readonlyValue = readonlyBox.value; +readonlyValue[0] = 0; + +type NamedTuple = [name: string, number]; +type NamedArray = NamedTuple[]; +declare const namedBox: Box; +export const namedArray = namedBox.value; +export const namedTuple = namedArray[0]; diff --git a/tsc/testdata/tests/cases/compiler/reverseMappedDeclarationSerialization.ts b/tsc/testdata/tests/cases/compiler/reverseMappedDeclarationSerialization.ts new file mode 100644 index 0000000000000..95dc810f9f100 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/reverseMappedDeclarationSerialization.ts @@ -0,0 +1,59 @@ +// @strict: true +// @declaration: true + +// @filename: finite.ts +declare function unwrap(input: { [K in keyof T]: { value: T[K] } }): T; +declare const indexedInput: Record; +export const indexed = unwrap(indexedInput); +export const explicit: Record = unwrap(indexedInput); +export const shallow = unwrap({ name: { value: "text" } }); + +declare const readonlyInput: { + readonly [key: string]: { value: string | number }; +}; +export const readonlyIndexed = unwrap(readonlyInput); + +type Validator = ((input: unknown) => T | undefined) | { + [K in keyof T]: Validator; +}; +declare function decode(input: { [K in keyof T]: Validator }): T; +declare const stringValidator: (input: unknown) => string | undefined; + +export const deep = decode({ a: { b: { c: { d: stringValidator } } } }); +interface NamedInput { + leaf: typeof stringValidator; +} +declare const namedInput: { node: NamedInput }; +export const named = decode(namedInput); + +declare const nestedIndexInput: { node: Record }; +export const nestedIndexed = decode(nestedIndexInput); + +export const namedExplicit: { node: { leaf: string } } = decode(namedInput); +export const deepExplicit: { a: { b: { c: { d: string } } } } = + decode({ a: { b: { c: { d: stringValidator } } } }); + +// @filename: recursive.ts +type Validator = ((input: unknown) => T | undefined) | { + [K in keyof T]: Validator; +}; +declare function decode(input: { [K in keyof T]: Validator }): T; +type RecursiveInput = { + value: (input: unknown) => string; + next: RecursiveInput; +}; +declare const recursiveInput: RecursiveInput; +export const recursive = decode(recursiveInput); + +interface GrowingInput { + value: (input: unknown) => T; + next: GrowingInput; +} +declare const growingInput: GrowingInput; +export const growing = decode(growingInput); + +interface RecursiveIndexInput { + [key: string]: RecursiveIndexInput; +} +declare const recursiveIndexInput: RecursiveIndexInput; +export const recursiveIndexed = decode(recursiveIndexInput);