UNPKG

1.85 kBJavaScriptView Raw
1module.exports = async function calc(plugins, config, createSpinner) {
2 process.setMaxListeners(config.checks.reduce((a, i) => a + i.files.length, 1))
3
4 async function step(number) {
5 for (let plugin of plugins.list) {
6 let spinner
7 if (plugin['wait' + number] && createSpinner) {
8 spinner = createSpinner(plugin['wait' + number]).start()
9 }
10 if (plugin['step' + number] || plugin['all' + number]) {
11 try {
12 if (plugin['all' + number]) {
13 await plugin['all' + number](config)
14 } else {
15 await Promise.all(
16 config.checks.map(i => {
17 return plugin['step' + number](config, i)
18 })
19 )
20 }
21 } catch (e) {
22 if (spinner) spinner.fail()
23 throw e
24 }
25 }
26 if (spinner) spinner.succeed()
27 }
28 }
29
30 async function callMethodForEachPlugin(methodName) {
31 for (let plugin of plugins.list) {
32 if (plugin[methodName]) {
33 await Promise.all(
34 config.checks.map(i => {
35 return plugin[methodName](config, i)
36 })
37 )
38 }
39 }
40 }
41
42 try {
43 await callMethodForEachPlugin('before')
44 for (let i = 0; i <= 100; i++) await step(i)
45 } finally {
46 await callMethodForEachPlugin('finally')
47 }
48 for (let check of config.checks) {
49 if (typeof check.sizeLimit !== 'undefined') {
50 check.passed = check.sizeLimit >= check.size
51 }
52 if (typeof check.timeLimit !== 'undefined') {
53 check.passed = check.timeLimit >= check.time
54 }
55 if (check.files && !check.files.length && check.path) {
56 check.missed = true
57 check.sizeLimit = undefined
58 check.timeLimit = undefined
59 }
60 }
61 config.failed = config.checks.some(i => i.passed === false)
62 config.missed = config.checks.some(i => i.missed === true)
63}