@@ -26,7 +26,7 @@ internal extension DataTaskProxy {
2626 \( prettyPrintMessage ( data: task. originalRequest? . httpBody) )
2727
2828 📦 Received data:
29- \( prettyPrintMessage ( data: receivedData) )
29+ \( prettyPrintMessage ( data: receivedData, mimeType : task . response ? . mimeType ) )
3030 """
3131 }
3232
@@ -53,9 +53,9 @@ internal extension DataTaskProxy {
5353 . joined ( separator: " \n " )
5454 }
5555
56- @NetworkActor private func prettyPrintMessage( data: Data ? ) -> String {
56+ @NetworkActor private func prettyPrintMessage( data: Data ? , mimeType : String ? = " text/plain " ) -> String {
5757 guard let data else { return " " }
58-
58+ guard plainTextMimeTypeHeuristic ( mimeType ) else { return " 🏞️ Detected MIME type is not plain text " }
5959 guard data. count < Self . maxLogSizeBytes else {
6060 return " 💡 Data size is too big ( \( data. count) bytes), console limit is \( Self . maxLogSizeBytes) bytes "
6161 }
@@ -67,7 +67,9 @@ internal extension DataTaskProxy {
6767 }
6868
6969 if let string = String ( data: data, encoding: . utf8) {
70- if let jsonData = try ? JSONSerialization . jsonObject ( with: data, options: [ ] ) ,
70+ let mimeContainsJson = mimeType? . contains ( " json " )
71+ if mimeContainsJson ?? true ,
72+ let jsonData = try ? JSONSerialization . jsonObject ( with: data, options: [ ] ) ,
7173 let prettyPrintedData = try ? JSONSerialization . data ( withJSONObject: jsonData, options: serializationOptions) ,
7274 let prettyPrintedString = String ( data: prettyPrintedData, encoding: . utf8) {
7375 return prettyPrintedString
@@ -79,4 +81,25 @@ internal extension DataTaskProxy {
7981 return " 🔍 Couldn't decode data as UTF-8 "
8082 }
8183
84+ @NetworkActor private func plainTextMimeTypeHeuristic( _ mimeType: String ? ) -> Bool {
85+ guard let mimeType else { return false }
86+
87+ let knownPlainTextMimeTypes = [ " javascript " , " yaml " , " toml " , " sql " , " graphql " , " markdown " , " urlencoded " ]
88+
89+ let isTextMimeType = mimeType. hasPrefix ( " text/ " )
90+ let isXml = mimeType. hasSuffix ( " +xml " ) || mimeType. contains ( " xml " )
91+ let isJson = mimeType. hasSuffix ( " +json " ) || mimeType. contains ( " json " )
92+ let isTextBased = mimeType. containsOneOf ( knownPlainTextMimeTypes)
93+
94+ return isTextMimeType || isXml || isJson || isTextBased
95+ }
96+
97+ }
98+
99+ extension String {
100+
101+ func containsOneOf( _ strings: [ String ] ) -> Bool {
102+ strings. contains { self . contains ( $0) }
103+ }
104+
82105}
0 commit comments