UNPKG

1.92 kBJavaScriptView Raw
1const bytes = require('bytes')
2const { error, warn, info } = require('prettycli')
3const { event, branch } = require('ci-env')
4const build = require('./build')
5const api = require('./api')
6const debug = require('./debug')
7
8const compare = (files, masterValues = {}) => {
9 let fail = false
10 let globalMessage
11
12 files.map(file => (file.master = masterValues[file.path]))
13
14 files.map(file => {
15 const { path, size, master, maxSize } = file
16
17 let message = `${path}: ${bytes(size)} `
18
19 /*
20 if size > maxSize, fail
21 else if size > master, warn + pass
22 else yay + pass
23 */
24
25 if (size > maxSize) {
26 fail = true
27 message += `> maxSize ${bytes(maxSize)} gzip`
28 error(message, { fail: false, label: 'FAIL' })
29 } else if (!master) {
30 message += `< maxSize ${bytes(maxSize)} gzip`
31 info('PASS', message)
32 } else {
33 message += `< maxSize ${bytes(maxSize)} gzip `
34 const diff = size - master
35
36 if (diff < 0) {
37 message += `(${bytes(Math.abs(diff))} smaller than master, good job!)`
38 info('PASS', message)
39 } else if (diff > 0) {
40 message += `(${bytes(diff)} larger than master, careful!)`
41 warn(message)
42 } else {
43 message += `(same as master)`
44 info('PASS', message)
45 }
46 }
47
48 if (files.length === 1) globalMessage = message
49 debug('message', message)
50 })
51
52 if (fail) build.fail(globalMessage || 'bundle size > maxSize')
53 else {
54 if (event === 'push' && branch === 'master') {
55 const values = []
56 files.map(file => values.push({ path: file.path, size: file.size }))
57 api.set(values)
58 }
59 build.pass(globalMessage || 'Good job! bundle size < maxSize')
60 }
61
62 debug('global message', globalMessage)
63}
64
65const reporter = files => {
66 if (api.enabled) api.get().then(masterValues => compare(files, masterValues))
67 else compare(files)
68}
69
70module.exports = reporter