-- in.cue --
deployment: [string]: #Deployment

deployment: foo: spec: replicas: 1

#Deployment: {
	#TypeMeta

	spec: #Spec
}

#Spec: replicas: int

#TypeMeta: {}

recloseSimple: {
	#foo: {}
	a: {#foo} & {b: int}
}

// Reclosing
reclose1: {
	#D: {
		x: int
		y: int
	}
	#a: {
		#D
		b: {
			c: int
		}
	}

	z: #a.b
	z: d: 3
}

reclose2: {
	#D: {
		x: int
		y: int
	}
	a: {
		#D
		b: {// keep open
			c: int
		}
	}

	z: a.b
	z: d: 3
}

reclose3: {
	#Step: {
		(#A | #B)
		#Common
	}
	#Common: {
		Name: string
	}
	#A: {
		#Common
		Something: int
	}
	#B: {
		#Common
		Else: int
	}
	x: #Step
	x: #A & {
		Name:      "a"
		Something: 4
	}
}
-- out/compile --
--- in.cue
{
  deployment: {
    [string]: 〈1;#Deployment〉
  }
  deployment: {
    foo: {
      spec: {
        replicas: 1
      }
    }
  }
  #Deployment: {
    〈1;#TypeMeta〉
    spec: 〈1;#Spec〉
  }
  #Spec: {
    replicas: int
  }
  #TypeMeta: {}
  recloseSimple: {
    #foo: {}
    a: ({
      〈1;#foo〉
    } & {
      b: int
    })
  }
  reclose1: {
    #D: {
      x: int
      y: int
    }
    #a: {
      〈1;#D〉
      b: {
        c: int
      }
    }
    z: 〈0;#a〉.b
    z: {
      d: 3
    }
  }
  reclose2: {
    #D: {
      x: int
      y: int
    }
    a: {
      〈1;#D〉
      b: {
        c: int
      }
    }
    z: 〈0;a〉.b
    z: {
      d: 3
    }
  }
  reclose3: {
    #Step: {
      (〈1;#A〉|〈1;#B〉)
      〈1;#Common〉
    }
    #Common: {
      Name: string
    }
    #A: {
      〈1;#Common〉
      Something: int
    }
    #B: {
      〈1;#Common〉
      Else: int
    }
    x: 〈0;#Step〉
    x: (〈0;#A〉 & {
      Name: "a"
      Something: 4
    })
  }
}
