* formats xml for response * @param {boolean} quietSetting - true if xml should just include error list * and false if should include deleted list and error list * @param {object []} errorResults - list of error result objects with each * object containing -- entry: { key, versionId }, error: arsena
(quietSetting, errorResults, deleted)
| 78 | * @return {string} xml string |
| 79 | */ |
| 80 | function _formatXML(quietSetting, errorResults, deleted) { |
| 81 | let errorXML = []; |
| 82 | errorResults.forEach(errorObj => { |
| 83 | errorXML.push( |
| 84 | '<Error>', |
| 85 | '<Key>', escapeForXml(errorObj.entry.key), '</Key>', |
| 86 | '<Code>', escapeForXml(errorObj.error.message), '</Code>'); |
| 87 | if (errorObj.entry.versionId) { |
| 88 | const version = errorObj.entry.versionId === 'null' ? |
| 89 | 'null' : escapeForXml(errorObj.entry.versionId); |
| 90 | errorXML.push('<VersionId>', version, '</VersionId>'); |
| 91 | } |
| 92 | errorXML.push( |
| 93 | '<Message>', |
| 94 | escapeForXml(errorObj.error.description), |
| 95 | '</Message>', |
| 96 | '</Error>' |
| 97 | ); |
| 98 | }); |
| 99 | errorXML = errorXML.join(''); |
| 100 | const xml = [ |
| 101 | '<?xml version="1.0" encoding="UTF-8"?>', |
| 102 | '<DeleteResult ', |
| 103 | 'xmlns="http://s3.amazonaws.com/doc/2006-03-01/">', |
| 104 | // placeholder in array for deleted list if verbose response |
| 105 | '', |
| 106 | errorXML, |
| 107 | '</DeleteResult>', |
| 108 | ]; |
| 109 | if (quietSetting) { |
| 110 | // just return errors |
| 111 | return xml.join(''); |
| 112 | } |
| 113 | const deletedXML = []; |
| 114 | deleted.forEach(version => { |
| 115 | const isDeleteMarker = version.isDeleteMarker; |
| 116 | const deleteMarkerVersionId = version.deleteMarkerVersionId; |
| 117 | // if deletion resulted in new delete marker or deleting a delete marker |
| 118 | deletedXML.push( |
| 119 | '<Deleted>', |
| 120 | '<Key>', |
| 121 | escapeForXml(version.entry.key), |
| 122 | '</Key>' |
| 123 | ); |
| 124 | if (version.entry.versionId) { |
| 125 | deletedXML.push( |
| 126 | '<VersionId>', |
| 127 | escapeForXml(version.entry.versionId), |
| 128 | '</VersionId>' |
| 129 | ); |
| 130 | } |
| 131 | if (isDeleteMarker) { |
| 132 | deletedXML.push( |
| 133 | '<DeleteMarker>', |
| 134 | isDeleteMarker, |
| 135 | '</DeleteMarker>', |
| 136 | '<DeleteMarkerVersionId>', |
| 137 | deleteMarkerVersionId, |