size-limit
Version:
CLI tool for Size Limit
60 lines (56 loc) • 1.7 kB
JavaScript
export default async function calc(plugins, config, createSpinner) {
process.setMaxListeners(config.checks.reduce((a, i) => a + i.files.length, 1))
async function step(number) {
for (let plugin of plugins.list) {
let spinner
if (plugin['wait' + number] && createSpinner) {
spinner = createSpinner(plugin['wait' + number]).start()
}
if (plugin['step' + number]) {
try {
await Promise.all(
config.checks.map(i => {
return plugin['step' + number](config, i)
})
)
} catch (e) {
if (spinner) spinner.error()
throw e
}
}
if (spinner) spinner.success()
}
}
async function callMethodForEachPlugin(methodName) {
for (let plugin of plugins.list) {
if (plugin[methodName]) {
await Promise.all(
config.checks.map(i => {
return plugin[methodName](config, i)
})
)
}
}
}
try {
await callMethodForEachPlugin('before')
for (let i = 0; i <= 100; i++) await step(i)
} finally {
await callMethodForEachPlugin('finally')
}
for (let check of config.checks) {
if (typeof check.sizeLimit !== 'undefined') {
check.passed = check.sizeLimit >= check.size
}
if (typeof check.timeLimit !== 'undefined') {
check.passed = check.timeLimit >= check.totalTime
}
if (check.files && !check.files.length && check.path) {
check.missed = true
check.sizeLimit = undefined
check.timeLimit = undefined
}
}
config.failed = config.checks.some(i => i.passed === false)
config.missed = config.checks.some(i => i.missed === true)
}