1 | module.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 | }
|