-
Notifications
You must be signed in to change notification settings - Fork 5.7k
/
logDeprecation.js
99 lines (86 loc) · 2.77 KB
/
logDeprecation.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
'use strict';
const chalk = require('chalk');
const weakMemoizee = require('memoizee/weak');
const _ = require('lodash');
const ServerlessError = require('../serverless-error');
const disabledDeprecationCodesByEnv = extractCodes(process.env.SLS_DEPRECATION_DISABLE);
const notificationModeByEnv = process.env.SLS_DEPRECATION_NOTIFICATION_MODE;
const triggeredDeprecations = new Set();
function extractCodes(codesStr) {
if (!codesStr) {
return new Set();
}
return new Set(codesStr.split(','));
}
const resolveDisabledDeprecationsByService = weakMemoizee((serviceConfig) => {
let disabledDeprecations = [];
if (typeof serviceConfig.disabledDeprecations === 'string') {
disabledDeprecations = [serviceConfig.disabledDeprecations];
} else {
disabledDeprecations = Array.from(serviceConfig.disabledDeprecations || []);
}
return new Set(disabledDeprecations);
});
const resolveMode = (serviceConfig) => {
switch (notificationModeByEnv) {
case 'error':
case 'warn':
return notificationModeByEnv;
default:
}
const modeByConfig = _.get(serviceConfig, 'deprecationNotificationMode');
switch (modeByConfig) {
case 'error':
case 'warn':
return modeByConfig;
default:
return module.exports.defaultMode;
}
};
function writeDeprecation(code, message) {
const prefix = 'Serverless: ';
const messageLines = message.split('\n');
const followingLinesPrefix = ' '.repeat(prefix.length);
for (let i = 1; i < messageLines.length; ++i) {
messageLines[i] = followingLinesPrefix + messageLines[i];
}
message = messageLines.join('\n');
process.stdout.write(
`Serverless: ${chalk.keyword('orange')(`Deprecation warning: ${message}`)}\n`
);
if (!code.startsWith('EXT_')) {
process.stdout.write(
` ${chalk.keyword('orange')(
`More Info: https://www.serverless.com/framework/docs/deprecations/#${code}`
)}\n`
);
}
}
module.exports = (code, message, { serviceConfig } = {}) => {
try {
if (
triggeredDeprecations.has(code) ||
disabledDeprecationCodesByEnv.has(code) ||
disabledDeprecationCodesByEnv.has('*')
) {
return;
}
if (serviceConfig) {
const serviceDisabledCodes = resolveDisabledDeprecationsByService(serviceConfig);
if (serviceDisabledCodes.has(code) || serviceDisabledCodes.has('*')) {
return;
}
}
if (resolveMode(serviceConfig) === 'error') {
throw new ServerlessError(
`${message}\n More Info: https://www.serverless.com/framework/docs/deprecations/#${code}`,
`REJECTED_DEPRECATION_${code}`
);
}
writeDeprecation(code, message);
} finally {
triggeredDeprecations.add(code);
}
};
module.exports.triggeredDeprecations = triggeredDeprecations;
module.exports.defaultMode = 'warn';