code: function(listData, set){
  			if(Array.isArray(listData)) {
  				listData = {data: listData};
  			}
  
  			var arr = [];
  			for(var i = 0; i < listData.data.length; i++) {
  				arr.push( this.hydrateInstance(listData.data[i]) );
  			}
  			listData.data = arr;
  			if(this.list) {
  				return this.list(listData, set);
  			} else {
  				var list = listData.data.slice(0);
  				list[this.listQueryProp || "__listQuery"] = set;
  				copyMetadata(listData, list);
  				return list;
  			}
  		}
docs: @function can-connect/constructor/constructor.hydrateList hydrateList
  @parent can-connect/constructor/constructor.hydrators
  
  Produce a typed list from the provided raw list data.
  
  @signature `connection.hydrateList(listData, set)`
  
  Call [can-connect/constructor/constructor.hydrateInstance] for each item in the raw list data, and then call
  [can-connect/constructor/constructor.list] with an array of the typed instances returned from
  [can-connect/constructor/constructor.hydrateInstance] .  If [can-connect/constructor/constructor.list] is not
  provided as an argument or implemented by another behavior, a normal array is created.
  
  @param {can-connect.listData} listData the raw list data returned by the data source, often via [can-connect/connection.getListData]
  @param {can-query-logic/query} query description of the set of data `listData` represents
  
  @return {can-connect.List} a typed list containing typed instances generated from `listData`