@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,282 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
3
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
4
|
+
if (!m) return o;
|
|
5
|
+
var i = m.call(o), r, ar = [], e;
|
|
6
|
+
try {
|
|
7
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
8
|
+
}
|
|
9
|
+
catch (error) { e = { error: error }; }
|
|
10
|
+
finally {
|
|
11
|
+
try {
|
|
12
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
13
|
+
}
|
|
14
|
+
finally { if (e) throw e.error; }
|
|
15
|
+
}
|
|
16
|
+
return ar;
|
|
17
|
+
};
|
|
18
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
19
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
20
|
+
if (ar || !(i in from)) {
|
|
21
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
22
|
+
ar[i] = from[i];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
26
|
+
};
|
|
27
|
+
var __values = (this && this.__values) || function(o) {
|
|
28
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
29
|
+
if (m) return m.call(o);
|
|
30
|
+
if (o && typeof o.length === "number") return {
|
|
31
|
+
next: function () {
|
|
32
|
+
if (o && i >= o.length) o = void 0;
|
|
33
|
+
return { value: o && o[i++], done: !o };
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
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.transformClassDeclaration = transformClassDeclaration;
|
|
43
|
+
var typescript_1 = __importDefault(require("typescript"));
|
|
44
|
+
var nodeMetadata_1 = require("../../classes/nodeMetadata");
|
|
45
|
+
var factory_1 = require("../../util/factory");
|
|
46
|
+
var buildGuardFromType_1 = require("../../util/functions/buildGuardFromType");
|
|
47
|
+
var uid_1 = require("../../util/uid");
|
|
48
|
+
var transformUserMacro_1 = require("../transformUserMacro");
|
|
49
|
+
var validateConstraintMetadata_1 = require("../../util/functions/validateConstraintMetadata");
|
|
50
|
+
var diagnostics_1 = require("../../classes/diagnostics");
|
|
51
|
+
var packages_1 = require("../../util/packages");
|
|
52
|
+
function transformClassDeclaration(state, node) {
|
|
53
|
+
var e_1, _a;
|
|
54
|
+
var _b;
|
|
55
|
+
var symbol = state.getSymbol(node);
|
|
56
|
+
if (!symbol || !node.name)
|
|
57
|
+
return state.transform(node);
|
|
58
|
+
var metadata = nodeMetadata_1.NodeMetadata.fromCache(state, node);
|
|
59
|
+
if (!hasReflectMetadata(state, node, metadata)) {
|
|
60
|
+
return state.transform(node);
|
|
61
|
+
}
|
|
62
|
+
var importIdentifier = state.addFileImport(state.getSourceFile(node), packages_1.CORE_PACKAGE, "Reflect");
|
|
63
|
+
var reflectStatements = new Array();
|
|
64
|
+
reflectStatements.push.apply(reflectStatements, __spreadArray([], __read(convertReflectionToStatements(generateClassMetadata(state, metadata, node))), false));
|
|
65
|
+
(0, validateConstraintMetadata_1.validateConstraintMetadata)(state, node, metadata);
|
|
66
|
+
try {
|
|
67
|
+
for (var _c = __values(node.members), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
68
|
+
var member = _d.value;
|
|
69
|
+
if (!member.name) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
var propertyName = typescript_1.default.getPropertyNameForPropertyNameNode(member.name);
|
|
73
|
+
if (!propertyName) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
var reflection = (_b = getNodeReflection(state, member)) !== null && _b !== void 0 ? _b : [];
|
|
77
|
+
if (reflection.length > 0 && typescript_1.default.hasStaticModifier(member)) {
|
|
78
|
+
diagnostics_1.Diagnostics.error(member.name, "Flamework does not support reflection on static members.");
|
|
79
|
+
}
|
|
80
|
+
reflectStatements.push.apply(reflectStatements, __spreadArray([], __read(convertReflectionToStatements(reflection, propertyName)), false));
|
|
81
|
+
(0, validateConstraintMetadata_1.validateConstraintMetadata)(state, member);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
85
|
+
finally {
|
|
86
|
+
try {
|
|
87
|
+
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
88
|
+
}
|
|
89
|
+
finally { if (e_1) throw e_1.error; }
|
|
90
|
+
}
|
|
91
|
+
return [updateClass(state, node, reflectStatements)];
|
|
92
|
+
function convertReflectionToStatements(metadata, property) {
|
|
93
|
+
var statements = metadata.map(function (_a) {
|
|
94
|
+
var _b = __read(_a, 2), name = _b[0], value = _b[1];
|
|
95
|
+
var args = [node.name, name, value];
|
|
96
|
+
if (property !== undefined) {
|
|
97
|
+
args.push(property);
|
|
98
|
+
}
|
|
99
|
+
return factory_1.f.statement(factory_1.f.call(factory_1.f.field(importIdentifier, "defineMetadata"), args));
|
|
100
|
+
});
|
|
101
|
+
addSectionComment(statements[0], node, property, "metadata");
|
|
102
|
+
return statements;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function generateFieldMetadata(state, metadata, field) {
|
|
106
|
+
var _a, _b;
|
|
107
|
+
var fields = new Array();
|
|
108
|
+
var type = state.typeChecker.getTypeAtLocation(field);
|
|
109
|
+
if (metadata.isRequested("flamework:type")) {
|
|
110
|
+
var id = (0, uid_1.getTypeUid)(state, type, (_a = field.name) !== null && _a !== void 0 ? _a : field);
|
|
111
|
+
fields.push(["flamework:type", id]);
|
|
112
|
+
}
|
|
113
|
+
if (metadata.isRequested("flamework:guard")) {
|
|
114
|
+
var guard = (0, buildGuardFromType_1.buildGuardFromType)(state, (_b = field.type) !== null && _b !== void 0 ? _b : field, type);
|
|
115
|
+
fields.push(["flamework:guard", guard]);
|
|
116
|
+
}
|
|
117
|
+
return fields;
|
|
118
|
+
}
|
|
119
|
+
function generateMethodMetadata(state, metadata, method) {
|
|
120
|
+
var _a, _b;
|
|
121
|
+
var fields = new Array();
|
|
122
|
+
var parameters = method.parameters.map(function (declaration) { return ({
|
|
123
|
+
declaration: declaration,
|
|
124
|
+
type: state.typeChecker.getTypeAtLocation(declaration),
|
|
125
|
+
trace: declaration,
|
|
126
|
+
}); });
|
|
127
|
+
fields.push.apply(fields, __spreadArray([], __read(generateParametersMetadata(state, metadata, parameters)), false));
|
|
128
|
+
var baseSignature = state.typeChecker.getSignatureFromDeclaration(method);
|
|
129
|
+
if (baseSignature) {
|
|
130
|
+
if (metadata.isRequested("flamework:return_type")) {
|
|
131
|
+
var id = (0, uid_1.getTypeUid)(state, baseSignature.getReturnType(), (_a = method.name) !== null && _a !== void 0 ? _a : method);
|
|
132
|
+
fields.push(["flamework:return_type", id]);
|
|
133
|
+
}
|
|
134
|
+
if (metadata.isRequested("flamework:return_guard")) {
|
|
135
|
+
var guard = (0, buildGuardFromType_1.buildGuardFromType)(state, (_b = method.type) !== null && _b !== void 0 ? _b : method, baseSignature.getReturnType());
|
|
136
|
+
fields.push(["flamework:return_guard", guard]);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return fields;
|
|
140
|
+
}
|
|
141
|
+
function generateParametersMetadata(state, metadata, parameters) {
|
|
142
|
+
var fields = new Array();
|
|
143
|
+
generateMetadata("flamework:parameters", function (param) {
|
|
144
|
+
return (0, uid_1.getTypeUid)(state, param.type, param.trace);
|
|
145
|
+
});
|
|
146
|
+
generateMetadata("flamework:parameter_names", function (param) {
|
|
147
|
+
return param.declaration && factory_1.f.is.identifier(param.declaration.name) ? param.declaration.name.text : "_binding_";
|
|
148
|
+
});
|
|
149
|
+
generateMetadata("flamework:parameter_guards", function (param) {
|
|
150
|
+
var _a;
|
|
151
|
+
return (0, buildGuardFromType_1.buildGuardFromType)(state, (_a = param.declaration) !== null && _a !== void 0 ? _a : param.trace, param.type);
|
|
152
|
+
});
|
|
153
|
+
generateMetadata("flamework:dependencies", function (param) {
|
|
154
|
+
return (0, transformUserMacro_1.getDependencyInjectionMetadata)(state, param.trace, param.type);
|
|
155
|
+
});
|
|
156
|
+
return fields;
|
|
157
|
+
function generateMetadata(name, callback) {
|
|
158
|
+
var e_2, _a;
|
|
159
|
+
if (metadata.isRequested(name)) {
|
|
160
|
+
var values = new Array();
|
|
161
|
+
try {
|
|
162
|
+
for (var parameters_1 = __values(parameters), parameters_1_1 = parameters_1.next(); !parameters_1_1.done; parameters_1_1 = parameters_1.next()) {
|
|
163
|
+
var parameter = parameters_1_1.value;
|
|
164
|
+
values.push(callback(parameter));
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
168
|
+
finally {
|
|
169
|
+
try {
|
|
170
|
+
if (parameters_1_1 && !parameters_1_1.done && (_a = parameters_1.return)) _a.call(parameters_1);
|
|
171
|
+
}
|
|
172
|
+
finally { if (e_2) throw e_2.error; }
|
|
173
|
+
}
|
|
174
|
+
fields.push([name, values]);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function generateClassMetadata(state, metadata, node) {
|
|
179
|
+
var e_3, _a, e_4, _b;
|
|
180
|
+
var symbol = state.getSymbol(node);
|
|
181
|
+
var fields = [];
|
|
182
|
+
if (metadata.isRequested("identifier")) {
|
|
183
|
+
fields.push(["identifier", (0, uid_1.getNodeTypeUid)(state, node)]);
|
|
184
|
+
}
|
|
185
|
+
if (metadata.isRequested("flamework:implements")) {
|
|
186
|
+
var implementClauses = new Array();
|
|
187
|
+
if (node.heritageClauses) {
|
|
188
|
+
try {
|
|
189
|
+
for (var _c = __values(node.heritageClauses), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
190
|
+
var clause = _d.value;
|
|
191
|
+
if (clause.token !== typescript_1.default.SyntaxKind.ImplementsKeyword) {
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
try {
|
|
195
|
+
for (var _e = (e_4 = void 0, __values(clause.types)), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
196
|
+
var type = _f.value;
|
|
197
|
+
implementClauses.push(factory_1.f.string((0, uid_1.getNodeTypeUid)(state, type)));
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
201
|
+
finally {
|
|
202
|
+
try {
|
|
203
|
+
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
204
|
+
}
|
|
205
|
+
finally { if (e_4) throw e_4.error; }
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
210
|
+
finally {
|
|
211
|
+
try {
|
|
212
|
+
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
213
|
+
}
|
|
214
|
+
finally { if (e_3) throw e_3.error; }
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
fields.push(["flamework:implements", factory_1.f.array(implementClauses, false)]);
|
|
218
|
+
}
|
|
219
|
+
var _g = __read(state.typeChecker.getTypeOfSymbol(symbol).getConstructSignatures(), 1), firstSignature = _g[0];
|
|
220
|
+
if (firstSignature !== undefined) {
|
|
221
|
+
// The parameter *types* come from the signature, not the declarations, so that a constructor
|
|
222
|
+
// inherited from a generic base is seen with its type arguments applied.
|
|
223
|
+
var parameters = firstSignature.parameters.map(function (parameter, index) {
|
|
224
|
+
var _a, _b;
|
|
225
|
+
var declaration = (_a = parameter.declarations) === null || _a === void 0 ? void 0 : _a.find(typescript_1.default.isParameter);
|
|
226
|
+
return {
|
|
227
|
+
declaration: declaration,
|
|
228
|
+
type: state.typeChecker.getParameterType(firstSignature, index),
|
|
229
|
+
trace: (_b = declaration !== null && declaration !== void 0 ? declaration : node.name) !== null && _b !== void 0 ? _b : node,
|
|
230
|
+
};
|
|
231
|
+
});
|
|
232
|
+
fields.push.apply(fields, __spreadArray([], __read(generateParametersMetadata(state, metadata, parameters)), false));
|
|
233
|
+
}
|
|
234
|
+
return fields;
|
|
235
|
+
}
|
|
236
|
+
function getNodeReflection(state, node, metadata) {
|
|
237
|
+
if (metadata === void 0) { metadata = nodeMetadata_1.NodeMetadata.fromCache(state, node); }
|
|
238
|
+
if (factory_1.f.is.methodDeclaration(node)) {
|
|
239
|
+
return generateMethodMetadata(state, metadata, node);
|
|
240
|
+
}
|
|
241
|
+
else if (factory_1.f.is.propertyDeclaration(node)) {
|
|
242
|
+
return generateFieldMetadata(state, metadata, node);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
function addSectionComment(node, declaration, property, label) {
|
|
246
|
+
if (!node) {
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
var elementName = property === undefined ? "".concat(declaration.name.text) : "".concat(declaration.name.text, ".").concat(property);
|
|
250
|
+
typescript_1.default.addSyntheticLeadingComment(node, typescript_1.default.SyntaxKind.SingleLineCommentTrivia, " (Flamework) ".concat(elementName, " ").concat(label));
|
|
251
|
+
}
|
|
252
|
+
function updateClass(state, node, staticStatements) {
|
|
253
|
+
var _a;
|
|
254
|
+
var members = node.members.map(function (node) { return state.transformNode(node); });
|
|
255
|
+
if (staticStatements) {
|
|
256
|
+
members.push(factory_1.f.staticBlockDeclaration(staticStatements));
|
|
257
|
+
}
|
|
258
|
+
return factory_1.f.update.classDeclaration(node, node.name ? state.transformNode(node.name) : undefined, members, node.heritageClauses, node.typeParameters, (_a = node.modifiers) === null || _a === void 0 ? void 0 : _a.map(function (v) { return state.transformNode(v); }));
|
|
259
|
+
}
|
|
260
|
+
function hasReflectMetadata(state, declaration, metadata) {
|
|
261
|
+
var e_5, _a;
|
|
262
|
+
if (metadata.isRequested("reflect")) {
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
try {
|
|
266
|
+
for (var _b = __values(declaration.members), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
267
|
+
var member = _c.value;
|
|
268
|
+
var metadata_1 = nodeMetadata_1.NodeMetadata.fromCache(state, member);
|
|
269
|
+
if (metadata_1.isRequested("reflect")) {
|
|
270
|
+
return true;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
275
|
+
finally {
|
|
276
|
+
try {
|
|
277
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
278
|
+
}
|
|
279
|
+
finally { if (e_5) throw e_5.error; }
|
|
280
|
+
}
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.transformExpression = transformExpression;
|
|
7
|
+
var typescript_1 = __importDefault(require("typescript"));
|
|
8
|
+
var diagnosticsUtils_1 = require("../util/diagnosticsUtils");
|
|
9
|
+
var transformAccessExpression_1 = require("./expressions/transformAccessExpression");
|
|
10
|
+
var transformBinaryExpression_1 = require("./expressions/transformBinaryExpression");
|
|
11
|
+
var transformCallExpression_1 = require("./expressions/transformCallExpression");
|
|
12
|
+
var transformDeleteExpression_1 = require("./expressions/transformDeleteExpression");
|
|
13
|
+
var transformNewExpression_1 = require("./expressions/transformNewExpression");
|
|
14
|
+
var transformUnaryExpression_1 = require("./expressions/transformUnaryExpression");
|
|
15
|
+
var transformNode_1 = require("./transformNode");
|
|
16
|
+
var TRANSFORMERS = new Map([
|
|
17
|
+
[typescript_1.default.SyntaxKind.CallExpression, transformCallExpression_1.transformCallExpression],
|
|
18
|
+
[typescript_1.default.SyntaxKind.NewExpression, transformNewExpression_1.transformNewExpression],
|
|
19
|
+
[typescript_1.default.SyntaxKind.ElementAccessExpression, transformAccessExpression_1.transformAccessExpression],
|
|
20
|
+
[typescript_1.default.SyntaxKind.PropertyAccessExpression, transformAccessExpression_1.transformAccessExpression],
|
|
21
|
+
[typescript_1.default.SyntaxKind.BinaryExpression, transformBinaryExpression_1.transformBinaryExpression],
|
|
22
|
+
[typescript_1.default.SyntaxKind.PrefixUnaryExpression, transformUnaryExpression_1.transformUnaryExpression],
|
|
23
|
+
[typescript_1.default.SyntaxKind.PostfixUnaryExpression, transformUnaryExpression_1.transformUnaryExpression],
|
|
24
|
+
[typescript_1.default.SyntaxKind.DeleteExpression, transformDeleteExpression_1.transformDeleteExpression],
|
|
25
|
+
]);
|
|
26
|
+
function transformExpression(state, expression) {
|
|
27
|
+
return (0, diagnosticsUtils_1.catchDiagnostic)(expression, function () {
|
|
28
|
+
var transformer = TRANSFORMERS.get(expression.kind);
|
|
29
|
+
if (transformer) {
|
|
30
|
+
return transformer(state, expression);
|
|
31
|
+
}
|
|
32
|
+
return typescript_1.default.visitEachChild(expression, function (newNode) { return (0, transformNode_1.transformNode)(state, newNode); }, state.context);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
3
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
4
|
+
if (!m) return o;
|
|
5
|
+
var i = m.call(o), r, ar = [], e;
|
|
6
|
+
try {
|
|
7
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
8
|
+
}
|
|
9
|
+
catch (error) { e = { error: error }; }
|
|
10
|
+
finally {
|
|
11
|
+
try {
|
|
12
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
13
|
+
}
|
|
14
|
+
finally { if (e) throw e.error; }
|
|
15
|
+
}
|
|
16
|
+
return ar;
|
|
17
|
+
};
|
|
18
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
19
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
20
|
+
if (ar || !(i in from)) {
|
|
21
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
22
|
+
ar[i] = from[i];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
26
|
+
};
|
|
27
|
+
var __values = (this && this.__values) || function(o) {
|
|
28
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
29
|
+
if (m) return m.call(o);
|
|
30
|
+
if (o && typeof o.length === "number") return {
|
|
31
|
+
next: function () {
|
|
32
|
+
if (o && i >= o.length) o = void 0;
|
|
33
|
+
return { value: o && o[i++], done: !o };
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
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.transformFile = transformFile;
|
|
43
|
+
var typescript_1 = __importDefault(require("typescript"));
|
|
44
|
+
var diagnostics_1 = require("../classes/diagnostics");
|
|
45
|
+
var factory_1 = require("../util/factory");
|
|
46
|
+
var transformStatementList_1 = require("./transformStatementList");
|
|
47
|
+
function transformFile(state, file) {
|
|
48
|
+
var e_1, _a;
|
|
49
|
+
state.buildInfo.invalidateGlobs(state.getFileId(file));
|
|
50
|
+
var statements = (0, transformStatementList_1.transformStatementList)(state, file.statements);
|
|
51
|
+
var imports = state.fileImports.get(file.fileName);
|
|
52
|
+
if (imports) {
|
|
53
|
+
var firstStatement = statements[0];
|
|
54
|
+
statements.unshift.apply(statements, __spreadArray([], __read(imports.map(function (info) {
|
|
55
|
+
return factory_1.f.importDeclaration(info.path, info.entries.map(function (x) { return [x.name, x.identifier]; }));
|
|
56
|
+
})), false));
|
|
57
|
+
// steal comments from original first statement so that comment directives work properly
|
|
58
|
+
if (firstStatement && statements[0]) {
|
|
59
|
+
typescript_1.default.copyComments(firstStatement, statements[0]);
|
|
60
|
+
typescript_1.default.removeAllComments(firstStatement);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
for (var _b = __values(diagnostics_1.Diagnostics.flush()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
65
|
+
var diag = _c.value;
|
|
66
|
+
state.addDiagnostic(diag);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
70
|
+
finally {
|
|
71
|
+
try {
|
|
72
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
73
|
+
}
|
|
74
|
+
finally { if (e_1) throw e_1.error; }
|
|
75
|
+
}
|
|
76
|
+
var sourceFile = factory_1.f.update.sourceFile(file, statements);
|
|
77
|
+
return sourceFile;
|
|
78
|
+
}
|