serverless/lib/utils/logDeprecation.js
Ahmad Mahmoud Mohammad 6f32f236d8
feat(CLI): Deprecations logger (#7741)
Co-authored-by: Ahmed Abdelwahab <ahmed.abdelwahab@prophecylabs.com>
Co-authored-by: Mariusz Nowak <medyk@medikoo.com>
2020-05-21 15:40:03 +02:00

49 lines
1.4 KiB
JavaScript

'use strict';
const chalk = require('chalk');
const weakMemoizee = require('memoizee/weak');
const disabledCodesByEnv = extractCodes(process.env.SLS_DEPRECATION_DISABLE);
const loggedDeprecations = new Set();
function extractCodes(codesStr) {
if (!codesStr) {
return new Set();
}
return new Set(codesStr.split(','));
}
const resolveDeprecatedByService = weakMemoizee(serviceConfig => {
let disabledDeprecations = [];
if (typeof serviceConfig.disabledDeprecations === 'string') {
disabledDeprecations = [serviceConfig.disabledDeprecations];
} else {
disabledDeprecations = Array.from(serviceConfig.disabledDeprecations || []);
}
return new Set(disabledDeprecations);
});
function writeDeprecation(code, message) {
process.stdout.write(
`Serverless: ${chalk.redBright(`Deprecation Notice: ${message}`)}\n ${chalk.dim(
`More Info: https://www.serverless.com/framework/docs/deprecations/#${code}`
)}\n`
);
}
module.exports = (code, message, { serviceConfig } = {}) => {
if (loggedDeprecations.has(code) || disabledCodesByEnv.has(code) || disabledCodesByEnv.has('*')) {
return;
}
if (serviceConfig) {
const serviceDisabledCodes = resolveDeprecatedByService(serviceConfig);
if (serviceDisabledCodes.has(code) || serviceDisabledCodes.has('*')) {
return;
}
}
loggedDeprecations.add(code);
writeDeprecation(code, message);
};