@@ -19,13 +19,18 @@ import Control.Concurrent
19
19
import Control.Monad (forever , join )
20
20
import Control.Monad.Trans (liftIO )
21
21
import qualified Data.ByteString as BS
22
+ import qualified Data.ByteString.Builder as B
22
23
import qualified Data.List as List
23
24
import qualified Data.Map as Map
24
25
import qualified Data.Maybe as Maybe
25
26
import qualified Data.Utf8 as Utf8
26
27
import Snap.Core (Snap )
27
28
import qualified System.Directory as Dir
28
29
import System.FilePath ((</>) )
30
+ import qualified System.IO.Streams.ByteString as SB
31
+ import qualified System.IO.Streams.Core as S
32
+ import qualified System.IO.Streams.File as SF
33
+ import qualified System.IO.Streams.Zlib as SZ
29
34
30
35
import qualified Elm.Constraint as C
31
36
import qualified Elm.Licenses as License
@@ -180,6 +185,12 @@ generateAllPackagesJson packages =
180
185
E. dict Pkg. toJsonString (E. list V. encode . _versions) packages
181
186
182
187
188
+ write :: FilePath -> E. Value -> IO ()
189
+ write path json =
190
+ do let temp = " temp-" ++ path
191
+ E. writeUgly temp json
192
+ Dir. renameFile temp path
193
+
183
194
184
195
185
196
-- GENERATE sitemap.xml
@@ -196,7 +207,7 @@ generateSitemap packages =
196
207
197
208
generateSearchJson :: Map. Map Pkg. Name Summary -> IO ()
198
209
generateSearchJson packages =
199
- write " search.json" $
210
+ gzipAndWrite " search.json.gz " $
200
211
E. list id $ Maybe. mapMaybe maybeEncodeSummary $
201
212
List. sortOn (negate . _weight . snd ) (Map. toList packages)
202
213
@@ -216,10 +227,15 @@ maybeEncodeSummary ( pkg, Summary versions maybeDetails _ ) =
216
227
]
217
228
218
229
219
- write :: FilePath -> E. Value -> IO ()
220
- write path json =
230
+ gzipAndWrite :: FilePath -> E. Value -> IO ()
231
+ gzipAndWrite path json =
221
232
do let temp = " temp-" ++ path
222
- E. writeUgly temp json
233
+ let lbs = B. toLazyByteString (E. encodeUgly json)
234
+ input <- SB. fromLazyByteString lbs
235
+
236
+ SF. withFileAsOutput temp $ \ output ->
237
+ S. connect input =<< SZ. gzip (SZ. CompressionLevel 9 ) output
238
+
223
239
Dir. renameFile temp path
224
240
225
241
0 commit comments