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
100
101
102
103
104
105
|
(function() {
var Deprecation, Emitter, grim;
Emitter = require('emissary').Emitter;
Deprecation = require('./deprecation');
if (global.__grim__ == null) {
grim = global.__grim__ = {
deprecations: {},
includeDeprecatedAPIs: true,
getDeprecations: function() {
var deprecation, deprecations, deprecationsByLineNumber, deprecationsByPackage, fileName, lineNumber, packageName, _ref;
deprecations = [];
_ref = grim.deprecations;
for (fileName in _ref) {
deprecationsByLineNumber = _ref[fileName];
for (lineNumber in deprecationsByLineNumber) {
deprecationsByPackage = deprecationsByLineNumber[lineNumber];
for (packageName in deprecationsByPackage) {
deprecation = deprecationsByPackage[packageName];
deprecations.push(deprecation);
}
}
}
return deprecations;
},
getDeprecationsLength: function() {
return this.getDeprecations().length;
},
clearDeprecations: function() {
grim.deprecations = {};
},
logDeprecations: function() {
var deprecation, deprecations, _i, _len;
deprecations = this.getDeprecations();
deprecations.sort(function(a, b) {
return b.getCallCount() - a.getCallCount();
});
console.warn("\nCalls to deprecated functions\n-----------------------------");
for (_i = 0, _len = deprecations.length; _i < _len; _i++) {
deprecation = deprecations[_i];
console.warn("(" + (deprecation.getCallCount()) + ") " + (deprecation.getOriginName()) + " : " + (deprecation.getMessage()), deprecation);
}
},
deprecate: function(message, metadata) {
var deprecation, deprecationSite, error, fileName, lineNumber, originalPrepareStackTrace, originalStackTraceLimit, packageName, stack, _base, _base1, _base2, _ref;
originalStackTraceLimit = Error.stackTraceLimit;
Error.stackTraceLimit = 7;
error = new Error;
Error.captureStackTrace(error);
Error.stackTraceLimit = originalStackTraceLimit;
originalPrepareStackTrace = Error.prepareStackTrace;
Error.prepareStackTrace = function(error, stack) {
return stack;
};
stack = error.stack.slice(1);
Error.prepareStackTrace = originalPrepareStackTrace;
deprecationSite = stack[0];
fileName = deprecationSite.getFileName();
lineNumber = deprecationSite.getLineNumber();
packageName = (_ref = metadata != null ? metadata.packageName : void 0) != null ? _ref : "";
if ((_base = grim.deprecations)[fileName] == null) {
_base[fileName] = {};
}
if ((_base1 = grim.deprecations[fileName])[lineNumber] == null) {
_base1[lineNumber] = {};
}
if ((_base2 = grim.deprecations[fileName][lineNumber])[packageName] == null) {
_base2[packageName] = new Deprecation(message);
}
deprecation = grim.deprecations[fileName][lineNumber][packageName];
deprecation.addStack(stack, metadata);
grim.emit("updated", deprecation);
},
addSerializedDeprecation: function(serializedDeprecation) {
var deprecation, fileName, lineNumber, message, packageName, stack, stacks, _base, _base1, _base2, _i, _len, _ref, _ref1, _ref2;
deprecation = Deprecation.deserialize(serializedDeprecation);
message = deprecation.getMessage();
fileName = deprecation.fileName, lineNumber = deprecation.lineNumber;
stacks = deprecation.getStacks();
packageName = (_ref = (_ref1 = stacks[0]) != null ? (_ref2 = _ref1.metadata) != null ? _ref2.packageName : void 0 : void 0) != null ? _ref : "";
if ((_base = grim.deprecations)[fileName] == null) {
_base[fileName] = {};
}
if ((_base1 = grim.deprecations[fileName])[lineNumber] == null) {
_base1[lineNumber] = {};
}
if ((_base2 = grim.deprecations[fileName][lineNumber])[packageName] == null) {
_base2[packageName] = new Deprecation(message, fileName, lineNumber);
}
deprecation = grim.deprecations[fileName][lineNumber][packageName];
for (_i = 0, _len = stacks.length; _i < _len; _i++) {
stack = stacks[_i];
deprecation.addStack(stack, stack.metadata);
}
grim.emit("updated", deprecation);
}
};
Emitter.extend(grim);
}
module.exports = global.__grim__;
}).call(this);
|