@flamework-experimental/transformer 2.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -0
- package/flamework-schema.json +76 -0
- package/flamework.config.schema.json +197 -0
- package/out/classes/buildInfo.js +467 -0
- package/out/classes/diagnostics.js +110 -0
- package/out/classes/logger.js +201 -0
- package/out/classes/nodeMetadata.js +232 -0
- package/out/classes/transformState.js +623 -0
- package/out/index.js +75 -0
- package/out/transformations/expressions/transformAccessExpression.js +35 -0
- package/out/transformations/expressions/transformBinaryExpression.js +57 -0
- package/out/transformations/expressions/transformCallExpression.js +33 -0
- package/out/transformations/expressions/transformDeleteExpression.js +22 -0
- package/out/transformations/expressions/transformNewExpression.js +17 -0
- package/out/transformations/expressions/transformUnaryExpression.js +63 -0
- package/out/transformations/macros/intrinsics/components.js +64 -0
- package/out/transformations/macros/intrinsics/env.js +31 -0
- package/out/transformations/macros/intrinsics/guards.js +43 -0
- package/out/transformations/macros/intrinsics/inlining.js +22 -0
- package/out/transformations/macros/intrinsics/networking.js +131 -0
- package/out/transformations/macros/intrinsics/parameters.js +81 -0
- package/out/transformations/macros/intrinsics/paths.js +42 -0
- package/out/transformations/macros/updateComponentConfig.js +409 -0
- package/out/transformations/plugins/nodeFactory.js +159 -0
- package/out/transformations/plugins/pluginHost.js +235 -0
- package/out/transformations/plugins/typeFacade.js +242 -0
- package/out/transformations/statements/transformClassDeclaration.js +282 -0
- package/out/transformations/transformExpression.js +34 -0
- package/out/transformations/transformFile.js +78 -0
- package/out/transformations/transformNetworkingCall.js +566 -0
- package/out/transformations/transformNode.js +27 -0
- package/out/transformations/transformStatement.js +57 -0
- package/out/transformations/transformStatementList.js +64 -0
- package/out/transformations/transformUserMacro.js +698 -0
- package/out/transformer.js +52 -0
- package/out/util/cache.js +10 -0
- package/out/util/constants.js +5 -0
- package/out/util/diagnosticsUtils.js +112 -0
- package/out/util/env.js +267 -0
- package/out/util/factory.js +583 -0
- package/out/util/functions/addLeadingComment.js +13 -0
- package/out/util/functions/arePathsEqual.js +14 -0
- package/out/util/functions/assert.js +17 -0
- package/out/util/functions/buildGuardFromType.js +713 -0
- package/out/util/functions/buildInstanceShape.js +156 -0
- package/out/util/functions/buildSerializerFromType.js +2309 -0
- package/out/util/functions/createPathTranslator.js +54 -0
- package/out/util/functions/emitTypescriptMismatch.js +80 -0
- package/out/util/functions/getDeclarationName.js +23 -0
- package/out/util/functions/getDeclarationOfType.js +7 -0
- package/out/util/functions/getIndexExpression.js +16 -0
- package/out/util/functions/getInstanceTypeFromType.js +75 -0
- package/out/util/functions/getNodeList.js +6 -0
- package/out/util/functions/getPackageJson.js +44 -0
- package/out/util/functions/getSuperClasses.js +51 -0
- package/out/util/functions/isAttributesAccess.js +23 -0
- package/out/util/functions/isCleanBuildDirectory.js +13 -0
- package/out/util/functions/isDefinedType.js +16 -0
- package/out/util/functions/isPathDescendantOf.js +25 -0
- package/out/util/functions/isTupleType.js +10 -0
- package/out/util/functions/parseCommandLine.js +31 -0
- package/out/util/functions/shuffle.js +39 -0
- package/out/util/functions/tryResolve.js +15 -0
- package/out/util/functions/validateConstraintMetadata.js +60 -0
- package/out/util/packages.js +12 -0
- package/out/util/projectConfig.js +221 -0
- package/out/util/schema.js +80 -0
- package/out/util/tsInternals.js +16 -0
- package/out/util/uid.js +227 -0
- package/package.json +45 -0
- package/rojo-schema.json +34 -0
- package/types.d.ts +4 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __values = (this && this.__values) || function(o) {
|
|
3
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
4
|
+
if (m) return m.call(o);
|
|
5
|
+
if (o && typeof o.length === "number") return {
|
|
6
|
+
next: function () {
|
|
7
|
+
if (o && i >= o.length) o = void 0;
|
|
8
|
+
return { value: o && o[i++], done: !o };
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
12
|
+
};
|
|
13
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
14
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
15
|
+
if (!m) return o;
|
|
16
|
+
var i = m.call(o), r, ar = [], e;
|
|
17
|
+
try {
|
|
18
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
19
|
+
}
|
|
20
|
+
catch (error) { e = { error: error }; }
|
|
21
|
+
finally {
|
|
22
|
+
try {
|
|
23
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
24
|
+
}
|
|
25
|
+
finally { if (e) throw e.error; }
|
|
26
|
+
}
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
30
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
31
|
+
if (ar || !(i in from)) {
|
|
32
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
33
|
+
ar[i] = from[i];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
37
|
+
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.Logger = void 0;
|
|
43
|
+
var chalk_1 = __importDefault(require("chalk"));
|
|
44
|
+
function getTime() {
|
|
45
|
+
var hrTime = process.hrtime();
|
|
46
|
+
return hrTime[0] * 1000 + hrTime[1] / 1e6;
|
|
47
|
+
}
|
|
48
|
+
var Logger = /** @class */ (function () {
|
|
49
|
+
function Logger() {
|
|
50
|
+
}
|
|
51
|
+
Logger.timer = function (name) {
|
|
52
|
+
this.queueTimer();
|
|
53
|
+
this.timers.push([name, getTime()]);
|
|
54
|
+
};
|
|
55
|
+
Logger.timerEnd = function () {
|
|
56
|
+
var timer = this.timers.pop();
|
|
57
|
+
if (!timer)
|
|
58
|
+
return;
|
|
59
|
+
var currentValue = this.timerTotals.get(timer[0]);
|
|
60
|
+
if (!currentValue)
|
|
61
|
+
this.timerTotals.set(timer[0], (currentValue = [0, 0]));
|
|
62
|
+
currentValue[0] += getTime() - timer[1];
|
|
63
|
+
currentValue[1]++;
|
|
64
|
+
};
|
|
65
|
+
Logger.queueTimer = function () {
|
|
66
|
+
var _this = this;
|
|
67
|
+
if (this.timerHandle !== undefined) {
|
|
68
|
+
this.timerHandle.refresh();
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
this.timerHandle = setTimeout(function () {
|
|
72
|
+
var e_1, _a;
|
|
73
|
+
var totals = _this.timerTotals;
|
|
74
|
+
_this.timerTotals = new Map();
|
|
75
|
+
try {
|
|
76
|
+
for (var totals_1 = __values(totals), totals_1_1 = totals_1.next(); !totals_1_1.done; totals_1_1 = totals_1.next()) {
|
|
77
|
+
var _b = __read(totals_1_1.value, 2), name_1 = _b[0], _c = __read(_b[1], 2), total = _c[0], count = _c[1];
|
|
78
|
+
console.log("Timer '".concat(name_1, "' took ").concat(total.toFixed(2), "ms (").concat(count, ")"));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
82
|
+
finally {
|
|
83
|
+
try {
|
|
84
|
+
if (totals_1_1 && !totals_1_1.done && (_a = totals_1.return)) _a.call(totals_1);
|
|
85
|
+
}
|
|
86
|
+
finally { if (e_1) throw e_1.error; }
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
Logger.write = function (message) {
|
|
91
|
+
process.stdout.write(message);
|
|
92
|
+
};
|
|
93
|
+
Logger.writeLine = function () {
|
|
94
|
+
var e_2, _a;
|
|
95
|
+
var messages = [];
|
|
96
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
97
|
+
messages[_i] = arguments[_i];
|
|
98
|
+
}
|
|
99
|
+
if (!this.debug)
|
|
100
|
+
return;
|
|
101
|
+
try {
|
|
102
|
+
for (var messages_1 = __values(messages), messages_1_1 = messages_1.next(); !messages_1_1.done; messages_1_1 = messages_1.next()) {
|
|
103
|
+
var message = messages_1_1.value;
|
|
104
|
+
var text = typeof message === "string" ? "".concat(message) : "".concat(JSON.stringify(message, undefined, "\t"));
|
|
105
|
+
var flameworkPrefix = "[".concat(chalk_1.default.gray("Flamework"), "]: ");
|
|
106
|
+
this.write("".concat(flameworkPrefix).concat(text.replace(/\n/g, "\n".concat(flameworkPrefix)), "\n"));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
110
|
+
finally {
|
|
111
|
+
try {
|
|
112
|
+
if (messages_1_1 && !messages_1_1.done && (_a = messages_1.return)) _a.call(messages_1);
|
|
113
|
+
}
|
|
114
|
+
finally { if (e_2) throw e_2.error; }
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
Logger.writeLineIfVerbose = function () {
|
|
118
|
+
var messages = [];
|
|
119
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
120
|
+
messages[_i] = arguments[_i];
|
|
121
|
+
}
|
|
122
|
+
if (this.verbose)
|
|
123
|
+
return this.writeLine.apply(this, __spreadArray([], __read(messages), false));
|
|
124
|
+
};
|
|
125
|
+
Logger.info = function () {
|
|
126
|
+
var messages = [];
|
|
127
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
128
|
+
messages[_i] = arguments[_i];
|
|
129
|
+
}
|
|
130
|
+
this.writeLine.apply(this, __spreadArray([], __read(messages.map(function (x) { return chalk_1.default.blue(x); })), false));
|
|
131
|
+
};
|
|
132
|
+
Logger.infoIfVerbose = function () {
|
|
133
|
+
var messages = [];
|
|
134
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
135
|
+
messages[_i] = arguments[_i];
|
|
136
|
+
}
|
|
137
|
+
if (this.verbose)
|
|
138
|
+
return this.info.apply(this, __spreadArray([], __read(messages), false));
|
|
139
|
+
};
|
|
140
|
+
Logger.warn = function () {
|
|
141
|
+
var messages = [];
|
|
142
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
143
|
+
messages[_i] = arguments[_i];
|
|
144
|
+
}
|
|
145
|
+
this.writeLine.apply(this, __spreadArray([], __read(messages.map(function (x) { return chalk_1.default.yellow(x); })), false));
|
|
146
|
+
};
|
|
147
|
+
Logger.warnIfVerbose = function () {
|
|
148
|
+
var messages = [];
|
|
149
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
150
|
+
messages[_i] = arguments[_i];
|
|
151
|
+
}
|
|
152
|
+
if (this.verbose)
|
|
153
|
+
return this.warn.apply(this, __spreadArray([], __read(messages), false));
|
|
154
|
+
};
|
|
155
|
+
Logger.error = function () {
|
|
156
|
+
var messages = [];
|
|
157
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
158
|
+
messages[_i] = arguments[_i];
|
|
159
|
+
}
|
|
160
|
+
this.writeLine.apply(this, __spreadArray([], __read(messages.map(function (x) { return chalk_1.default.red(x); })), false));
|
|
161
|
+
};
|
|
162
|
+
Logger.benchmark = function (label) {
|
|
163
|
+
if (!this.debug)
|
|
164
|
+
return;
|
|
165
|
+
var depth = this.benchmarkLabels.length;
|
|
166
|
+
this.benchmarkLabels.push({
|
|
167
|
+
start: new Date().getTime(),
|
|
168
|
+
label: label,
|
|
169
|
+
});
|
|
170
|
+
this.benchmarkOutput += "".concat("\t".repeat(depth), "Begin ").concat(label, "\n");
|
|
171
|
+
};
|
|
172
|
+
Logger.benchmarkEnd = function () {
|
|
173
|
+
if (!this.debug)
|
|
174
|
+
return;
|
|
175
|
+
var label = this.benchmarkLabels.pop();
|
|
176
|
+
var depth = this.benchmarkLabels.length;
|
|
177
|
+
if (!label)
|
|
178
|
+
throw new Error("Unexpected benchmarkEnd()");
|
|
179
|
+
var timeDifference = new Date().getTime() - label.start;
|
|
180
|
+
this.benchmarkOutput += "".concat("\t".repeat(depth), "End ").concat(label.label, " (").concat(timeDifference, "ms)\n");
|
|
181
|
+
if (depth === 0) {
|
|
182
|
+
this.info(this.benchmarkOutput);
|
|
183
|
+
this.benchmarkOutput = "";
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
Logger.debug = true;
|
|
187
|
+
Logger.verbose = process.argv.includes("--verbose");
|
|
188
|
+
Logger.timerTotals = new Map();
|
|
189
|
+
Logger.timers = new Array();
|
|
190
|
+
Logger.benchmarkLabels = [];
|
|
191
|
+
Logger.benchmarkOutput = "";
|
|
192
|
+
(function () {
|
|
193
|
+
// Workaround for vscode PTY not having color highlighting.
|
|
194
|
+
if (process.env.VSCODE_CWD !== undefined) {
|
|
195
|
+
// ANSI 256
|
|
196
|
+
chalk_1.default.level = 2;
|
|
197
|
+
}
|
|
198
|
+
})();
|
|
199
|
+
return Logger;
|
|
200
|
+
}());
|
|
201
|
+
exports.Logger = Logger;
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __values = (this && this.__values) || function(o) {
|
|
3
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
4
|
+
if (m) return m.call(o);
|
|
5
|
+
if (o && typeof o.length === "number") return {
|
|
6
|
+
next: function () {
|
|
7
|
+
if (o && i >= o.length) o = void 0;
|
|
8
|
+
return { value: o && o[i++], done: !o };
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.NodeMetadata = void 0;
|
|
18
|
+
var typescript_1 = __importDefault(require("typescript"));
|
|
19
|
+
var factory_1 = require("../util/factory");
|
|
20
|
+
var NodeMetadata = /** @class */ (function () {
|
|
21
|
+
function NodeMetadata(state, node) {
|
|
22
|
+
this.set = new Set();
|
|
23
|
+
this.symbols = new Map();
|
|
24
|
+
this.types = new Map();
|
|
25
|
+
this.trace = new Map();
|
|
26
|
+
this.parse(state, node);
|
|
27
|
+
}
|
|
28
|
+
NodeMetadata.fromSymbol = function (state, symbol) {
|
|
29
|
+
if (symbol.valueDeclaration) {
|
|
30
|
+
return NodeMetadata.fromCache(state, symbol.valueDeclaration);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
NodeMetadata.fromCache = function (state, node) {
|
|
34
|
+
var existing = NodeMetadata.metadataCache.get(node);
|
|
35
|
+
if (existing) {
|
|
36
|
+
return existing;
|
|
37
|
+
}
|
|
38
|
+
var metadata = new NodeMetadata(state, node);
|
|
39
|
+
NodeMetadata.metadataCache.set(node, metadata);
|
|
40
|
+
return metadata;
|
|
41
|
+
};
|
|
42
|
+
NodeMetadata.prototype.parseText = function (text, node) {
|
|
43
|
+
var e_1, _a;
|
|
44
|
+
try {
|
|
45
|
+
for (var _b = __values(text.trim().replace(/\s+/, " ").split(" ")), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
46
|
+
var name_1 = _c.value;
|
|
47
|
+
this.set.add(name_1);
|
|
48
|
+
this.trace.set(name_1, node);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
52
|
+
finally {
|
|
53
|
+
try {
|
|
54
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
55
|
+
}
|
|
56
|
+
finally { if (e_1) throw e_1.error; }
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
NodeMetadata.prototype.parseMetadata = function (state, tag) {
|
|
60
|
+
var e_2, _a;
|
|
61
|
+
if (typeof tag.comment === "string") {
|
|
62
|
+
this.parseText(tag.comment, tag);
|
|
63
|
+
}
|
|
64
|
+
else if (tag.comment) {
|
|
65
|
+
try {
|
|
66
|
+
for (var _b = __values(tag.comment), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
67
|
+
var comment = _c.value;
|
|
68
|
+
if (typescript_1.default.isJSDocLinkLike(comment)) {
|
|
69
|
+
if (!comment.name)
|
|
70
|
+
continue;
|
|
71
|
+
var symbol = state.getSymbol(comment.name);
|
|
72
|
+
if (!symbol)
|
|
73
|
+
continue;
|
|
74
|
+
var type = symbol.flags & typescript_1.default.SymbolFlags.TypeAlias
|
|
75
|
+
? state.typeChecker.getDeclaredTypeOfSymbol(symbol)
|
|
76
|
+
: state.typeChecker.getTypeAtLocation(comment.name);
|
|
77
|
+
var symbols = this.symbols.get(comment.text);
|
|
78
|
+
var types = this.types.get(comment.text);
|
|
79
|
+
if (!types)
|
|
80
|
+
this.types.set(comment.text, (types = []));
|
|
81
|
+
if (!symbols)
|
|
82
|
+
this.symbols.set(comment.text, (symbols = []));
|
|
83
|
+
symbols.push(symbol);
|
|
84
|
+
types.push(type);
|
|
85
|
+
this.trace.set(symbol, comment);
|
|
86
|
+
this.trace.set(type, comment);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this.parseText(comment.text, comment);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
94
|
+
finally {
|
|
95
|
+
try {
|
|
96
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
97
|
+
}
|
|
98
|
+
finally { if (e_2) throw e_2.error; }
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
NodeMetadata.prototype.parse = function (state, node) {
|
|
103
|
+
var e_3, _a, e_4, _b, e_5, _c, e_6, _d, e_7, _e, e_8, _f;
|
|
104
|
+
var _g, _h;
|
|
105
|
+
var tags = typescript_1.default.getJSDocTags(node);
|
|
106
|
+
try {
|
|
107
|
+
for (var tags_1 = __values(tags), tags_1_1 = tags_1.next(); !tags_1_1.done; tags_1_1 = tags_1.next()) {
|
|
108
|
+
var tag = tags_1_1.value;
|
|
109
|
+
if (tag.tagName.text === "metadata") {
|
|
110
|
+
this.parseMetadata(state, tag);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
115
|
+
finally {
|
|
116
|
+
try {
|
|
117
|
+
if (tags_1_1 && !tags_1_1.done && (_a = tags_1.return)) _a.call(tags_1);
|
|
118
|
+
}
|
|
119
|
+
finally { if (e_3) throw e_3.error; }
|
|
120
|
+
}
|
|
121
|
+
var decorators = typescript_1.default.canHaveDecorators(node) ? typescript_1.default.getDecorators(node) : undefined;
|
|
122
|
+
if (decorators) {
|
|
123
|
+
try {
|
|
124
|
+
for (var decorators_1 = __values(decorators), decorators_1_1 = decorators_1.next(); !decorators_1_1.done; decorators_1_1 = decorators_1.next()) {
|
|
125
|
+
var decorator = decorators_1_1.value;
|
|
126
|
+
var expression = decorator.expression;
|
|
127
|
+
var symbol = state.getSymbol(factory_1.f.is.call(expression) ? expression.expression : expression);
|
|
128
|
+
if (!symbol || !symbol.declarations)
|
|
129
|
+
continue;
|
|
130
|
+
try {
|
|
131
|
+
for (var _j = (e_5 = void 0, __values(symbol.declarations)), _k = _j.next(); !_k.done; _k = _j.next()) {
|
|
132
|
+
var declaration = _k.value;
|
|
133
|
+
this.parse(state, declaration);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
137
|
+
finally {
|
|
138
|
+
try {
|
|
139
|
+
if (_k && !_k.done && (_c = _j.return)) _c.call(_j);
|
|
140
|
+
}
|
|
141
|
+
finally { if (e_5) throw e_5.error; }
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
146
|
+
finally {
|
|
147
|
+
try {
|
|
148
|
+
if (decorators_1_1 && !decorators_1_1.done && (_b = decorators_1.return)) _b.call(decorators_1);
|
|
149
|
+
}
|
|
150
|
+
finally { if (e_4) throw e_4.error; }
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (typescript_1.default.isClassElement(node) && node.name) {
|
|
154
|
+
// Interfaces are able to request metadata for their own property/methods.
|
|
155
|
+
var name_2 = typescript_1.default.getNameFromPropertyName(node.name);
|
|
156
|
+
if (name_2 && typescript_1.default.isClassLike(node.parent)) {
|
|
157
|
+
var implementNodes = typescript_1.default.getEffectiveImplementsTypeNodes(node.parent);
|
|
158
|
+
if (implementNodes) {
|
|
159
|
+
try {
|
|
160
|
+
for (var implementNodes_1 = __values(implementNodes), implementNodes_1_1 = implementNodes_1.next(); !implementNodes_1_1.done; implementNodes_1_1 = implementNodes_1.next()) {
|
|
161
|
+
var implement = implementNodes_1_1.value;
|
|
162
|
+
var symbol = state.getSymbol(implement.expression);
|
|
163
|
+
var member = (_g = symbol === null || symbol === void 0 ? void 0 : symbol.members) === null || _g === void 0 ? void 0 : _g.get(typescript_1.default.escapeLeadingUnderscores(name_2));
|
|
164
|
+
if (member && member.declarations) {
|
|
165
|
+
try {
|
|
166
|
+
for (var _l = (e_7 = void 0, __values(member.declarations)), _m = _l.next(); !_m.done; _m = _l.next()) {
|
|
167
|
+
var declaration = _m.value;
|
|
168
|
+
this.parse(state, declaration);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
172
|
+
finally {
|
|
173
|
+
try {
|
|
174
|
+
if (_m && !_m.done && (_e = _l.return)) _e.call(_l);
|
|
175
|
+
}
|
|
176
|
+
finally { if (e_7) throw e_7.error; }
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
182
|
+
finally {
|
|
183
|
+
try {
|
|
184
|
+
if (implementNodes_1_1 && !implementNodes_1_1.done && (_d = implementNodes_1.return)) _d.call(implementNodes_1);
|
|
185
|
+
}
|
|
186
|
+
finally { if (e_6) throw e_6.error; }
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
else if (typescript_1.default.isClassLike(node)) {
|
|
192
|
+
// Interfaces are able to request metadata for the object it is implemented on.
|
|
193
|
+
var implementNodes = typescript_1.default.getEffectiveImplementsTypeNodes(node);
|
|
194
|
+
if (implementNodes) {
|
|
195
|
+
try {
|
|
196
|
+
for (var implementNodes_2 = __values(implementNodes), implementNodes_2_1 = implementNodes_2.next(); !implementNodes_2_1.done; implementNodes_2_1 = implementNodes_2.next()) {
|
|
197
|
+
var implement = implementNodes_2_1.value;
|
|
198
|
+
var symbol = state.getSymbol(implement.expression);
|
|
199
|
+
if (symbol && ((_h = symbol.declarations) === null || _h === void 0 ? void 0 : _h[0])) {
|
|
200
|
+
this.parse(state, symbol.declarations[0]);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
205
|
+
finally {
|
|
206
|
+
try {
|
|
207
|
+
if (implementNodes_2_1 && !implementNodes_2_1.done && (_f = implementNodes_2.return)) _f.call(implementNodes_2);
|
|
208
|
+
}
|
|
209
|
+
finally { if (e_8) throw e_8.error; }
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
NodeMetadata.prototype.isRequested = function (metadata) {
|
|
215
|
+
if (this.set.has("~".concat(metadata))) {
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
return this.set.has(metadata) || this.set.has("*");
|
|
219
|
+
};
|
|
220
|
+
NodeMetadata.prototype.getSymbol = function (key) {
|
|
221
|
+
return this.symbols.get(key);
|
|
222
|
+
};
|
|
223
|
+
NodeMetadata.prototype.getType = function (key) {
|
|
224
|
+
return this.types.get(key);
|
|
225
|
+
};
|
|
226
|
+
NodeMetadata.prototype.getTrace = function (name) {
|
|
227
|
+
return this.trace.get(name);
|
|
228
|
+
};
|
|
229
|
+
NodeMetadata.metadataCache = new WeakMap();
|
|
230
|
+
return NodeMetadata;
|
|
231
|
+
}());
|
|
232
|
+
exports.NodeMetadata = NodeMetadata;
|