-- in.cue --
// Given the existence of this field, embedDefault is a struct. This
// means that embedding this conjunction into `embedDefault` itself should
// make it resolve to `{a: 2}`.

default: {
    y: *1 | {a: 2}
    y
}

unambiguous: {
    y: 1 | {a: 2}
    y
}

forDefault: {
    y: *1 | {a: 2}
    for x in [1] {y}
}

// Carry over default to first disjunct.
openDefault: {
    #y: *1 | {a: 2}
    #y
}

openAmbiguous: {
    #y: 1 | {a: 2}
    #y
}

forceStruct: {
    #y: 1 | {a: 2}
    #y
    {}
}

defaultsMulti: {
    a: {
        #def: {
            *{} | {a: string} | {b: string}
            *{} | {c: string} | {d: string}
        }

        a: #def & {a: "foo"}
    }

    b: {
        #def: {
            *{} | {a: string} | {b: string}
            *{} | {c: string} | {d: string}
            *{} | {d: string} | {e: string}
        }

        a: #def & {a: "foo", e: "bar"}
    }
}

nested: {
	a: 1 | 2 | *(
		(3 | 4 | *( 5 | 6 | *7)) & ( 3 | 4 | ( *7 | 8 )))
}

-- out/eval --
(struct){
  default: (struct){
    y: ((int|struct)){ |(*(int){ 1 }, (struct){
        a: (int){ 2 }
      }) }
    a: (int){ 2 }
  }
  unambiguous: (struct){
    y: ((int|struct)){ |((int){ 1 }, (struct){
        a: (int){ 2 }
      }) }
    a: (int){ 2 }
  }
  forDefault: (struct){
    y: ((int|struct)){ |(*(int){ 1 }, (struct){
        a: (int){ 2 }
      }) }
    a: (int){ 2 }
  }
  openDefault: ((int|struct)){ |(*(int){
      1
      #y: ((int|struct)){ |(*(int){ 1 }, (#struct){
          a: (int){ 2 }
        }) }
    }, (#struct){
      #y: ((int|struct)){ |(*(int){ 1 }, (#struct){
          a: (int){ 2 }
        }) }
      a: (int){ 2 }
    }) }
  openAmbiguous: ((int|struct)){ |((int){
      1
      #y: ((int|struct)){ |((int){ 1 }, (#struct){
          a: (int){ 2 }
        }) }
    }, (#struct){
      #y: ((int|struct)){ |((int){ 1 }, (#struct){
          a: (int){ 2 }
        }) }
      a: (int){ 2 }
    }) }
  forceStruct: (#struct){
    #y: ((int|struct)){ |((int){ 1 }, (#struct){
        a: (int){ 2 }
      }) }
    a: (int){ 2 }
  }
  defaultsMulti: (struct){
    a: (struct){
      #def: (#struct){ |(*(#struct){
        }, (#struct){
          c: (string){ string }
        }, (#struct){
          d: (string){ string }
        }, (#struct){
          a: (string){ string }
        }, (#struct){
          a: (string){ string }
          c: (string){ string }
        }, (#struct){
          a: (string){ string }
          d: (string){ string }
        }, (#struct){
          b: (string){ string }
        }, (#struct){
          b: (string){ string }
          c: (string){ string }
        }, (#struct){
          b: (string){ string }
          d: (string){ string }
        }) }
      a: (#struct){ |(*(#struct){
          a: (string){ "foo" }
        }, (#struct){
          a: (string){ "foo" }
          c: (string){ string }
        }, (#struct){
          a: (string){ "foo" }
          d: (string){ string }
        }) }
    }
    b: (struct){
      #def: (#struct){ |(*(#struct){
        }, (#struct){
          d: (string){ string }
        }, (#struct){
          e: (string){ string }
        }, (#struct){
          c: (string){ string }
        }, (#struct){
          c: (string){ string }
          d: (string){ string }
        }, (#struct){
          c: (string){ string }
          e: (string){ string }
        }, (#struct){
          d: (string){ string }
          e: (string){ string }
        }, (#struct){
          a: (string){ string }
        }, (#struct){
          a: (string){ string }
          d: (string){ string }
        }, (#struct){
          a: (string){ string }
          e: (string){ string }
        }, (#struct){
          a: (string){ string }
          c: (string){ string }
        }, (#struct){
          a: (string){ string }
          c: (string){ string }
          d: (string){ string }
        }, (#struct){
          a: (string){ string }
          c: (string){ string }
          e: (string){ string }
        }, (#struct){
          a: (string){ string }
          d: (string){ string }
          e: (string){ string }
        }, (#struct){
          b: (string){ string }
        }, (#struct){
          b: (string){ string }
          d: (string){ string }
        }, (#struct){
          b: (string){ string }
          e: (string){ string }
        }, (#struct){
          b: (string){ string }
          c: (string){ string }
        }, (#struct){
          b: (string){ string }
          c: (string){ string }
          d: (string){ string }
        }, (#struct){
          b: (string){ string }
          c: (string){ string }
          e: (string){ string }
        }, (#struct){
          b: (string){ string }
          d: (string){ string }
          e: (string){ string }
        }) }
      a: (#struct){ |(*(#struct){
          a: (string){ "foo" }
          e: (string){ "bar" }
        }, (#struct){
          a: (string){ "foo" }
          e: (string){ "bar" }
          c: (string){ string }
        }, (#struct){
          a: (string){ "foo" }
          e: (string){ "bar" }
          d: (string){ string }
        }) }
    }
  }
  nested: (struct){
    a: (int){ |(*(int){ 7 }, (int){ 2 }, (int){ 3 }, (int){ 4 }, (int){ 1 }) }
  }
}
-- out/compile --
--- in.cue
{
  default: {
    y: (*1|{
      a: 2
    })
    〈0;y〉
  }
  unambiguous: {
    y: (1|{
      a: 2
    })
    〈0;y〉
  }
  forDefault: {
    y: (*1|{
      a: 2
    })
    for _, x in [
      1,
    ] {
      〈2;y〉
    }
  }
  openDefault: {
    #y: (*1|{
      a: 2
    })
    〈0;#y〉
  }
  openAmbiguous: {
    #y: (1|{
      a: 2
    })
    〈0;#y〉
  }
  forceStruct: {
    #y: (1|{
      a: 2
    })
    〈0;#y〉
    {}
  }
  defaultsMulti: {
    a: {
      #def: {
        (*{}|{
          a: string
        }|{
          b: string
        })
        (*{}|{
          c: string
        }|{
          d: string
        })
      }
      a: (〈0;#def〉 & {
        a: "foo"
      })
    }
    b: {
      #def: {
        (*{}|{
          a: string
        }|{
          b: string
        })
        (*{}|{
          c: string
        }|{
          d: string
        })
        (*{}|{
          d: string
        }|{
          e: string
        })
      }
      a: (〈0;#def〉 & {
        a: "foo"
        e: "bar"
      })
    }
  }
  nested: {
    a: (1|2|*((3|4|*(5|6|*7)) & (3|4|(*7|8))))
  }
}
