.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / tslint / node_modules / tsutils / util / util.js
1 "use strict";
2 Object.defineProperty(exports, "__esModule", { value: true });
3 var tslib_1 = require("tslib");
4 var ts = require("typescript");
5 var node_1 = require("../typeguard/node");
6 tslib_1.__exportStar(require("./control-flow"), exports);
7 function getChildOfKind(node, kind, sourceFile) {
8     for (var _i = 0, _a = node.getChildren(sourceFile); _i < _a.length; _i++) {
9         var child = _a[_i];
10         if (child.kind === kind)
11             return child;
12     }
13 }
14 exports.getChildOfKind = getChildOfKind;
15 function isTokenKind(kind) {
16     return kind >= ts.SyntaxKind.FirstToken && kind <= ts.SyntaxKind.LastToken;
17 }
18 exports.isTokenKind = isTokenKind;
19 function isNodeKind(kind) {
20     return kind >= ts.SyntaxKind.FirstNode;
21 }
22 exports.isNodeKind = isNodeKind;
23 function isAssignmentKind(kind) {
24     return kind >= ts.SyntaxKind.FirstAssignment && kind <= ts.SyntaxKind.LastAssignment;
25 }
26 exports.isAssignmentKind = isAssignmentKind;
27 function isTypeNodeKind(kind) {
28     return kind >= ts.SyntaxKind.FirstTypeNode && kind <= ts.SyntaxKind.LastTypeNode;
29 }
30 exports.isTypeNodeKind = isTypeNodeKind;
31 function isJsDocKind(kind) {
32     return kind >= ts.SyntaxKind.FirstJSDocNode && kind <= ts.SyntaxKind.LastJSDocNode;
33 }
34 exports.isJsDocKind = isJsDocKind;
35 function isThisParameter(parameter) {
36     return parameter.name.kind === ts.SyntaxKind.Identifier && parameter.name.originalKeywordKind === ts.SyntaxKind.ThisKeyword;
37 }
38 exports.isThisParameter = isThisParameter;
39 function getModifier(node, kind) {
40     if (node.modifiers !== undefined)
41         for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) {
42             var modifier = _a[_i];
43             if (modifier.kind === kind)
44                 return modifier;
45         }
46 }
47 exports.getModifier = getModifier;
48 function hasModifier(modifiers) {
49     var kinds = [];
50     for (var _i = 1; _i < arguments.length; _i++) {
51         kinds[_i - 1] = arguments[_i];
52     }
53     if (modifiers === undefined)
54         return false;
55     for (var _a = 0, modifiers_1 = modifiers; _a < modifiers_1.length; _a++) {
56         var modifier = modifiers_1[_a];
57         if (kinds.indexOf(modifier.kind) !== -1)
58             return true;
59     }
60     return false;
61 }
62 exports.hasModifier = hasModifier;
63 function isParameterProperty(node) {
64     return hasModifier(node.modifiers, ts.SyntaxKind.PublicKeyword, ts.SyntaxKind.ProtectedKeyword, ts.SyntaxKind.PrivateKeyword, ts.SyntaxKind.ReadonlyKeyword);
65 }
66 exports.isParameterProperty = isParameterProperty;
67 function hasAccessModifier(node) {
68     return hasModifier(node.modifiers, ts.SyntaxKind.PublicKeyword, ts.SyntaxKind.ProtectedKeyword, ts.SyntaxKind.PrivateKeyword);
69 }
70 exports.hasAccessModifier = hasAccessModifier;
71 function isFlagSet(obj, flag) {
72     return (obj.flags & flag) !== 0;
73 }
74 exports.isNodeFlagSet = isFlagSet;
75 exports.isTypeFlagSet = isFlagSet;
76 exports.isSymbolFlagSet = isFlagSet;
77 function isObjectFlagSet(objectType, flag) {
78     return (objectType.objectFlags & flag) !== 0;
79 }
80 exports.isObjectFlagSet = isObjectFlagSet;
81 function isModifierFlagSet(node, flag) {
82     return (ts.getCombinedModifierFlags(node) & flag) !== 0;
83 }
84 exports.isModifierFlagSet = isModifierFlagSet;
85 function isModfierFlagSet(node, flag) {
86     return isModifierFlagSet(node, flag);
87 }
88 exports.isModfierFlagSet = isModfierFlagSet;
89 function getPreviousStatement(statement) {
90     var parent = statement.parent;
91     if (node_1.isBlockLike(parent)) {
92         var index = parent.statements.indexOf(statement);
93         if (index > 0)
94             return parent.statements[index - 1];
95     }
96 }
97 exports.getPreviousStatement = getPreviousStatement;
98 function getNextStatement(statement) {
99     var parent = statement.parent;
100     if (node_1.isBlockLike(parent)) {
101         var index = parent.statements.indexOf(statement);
102         if (index < parent.statements.length)
103             return parent.statements[index + 1];
104     }
105 }
106 exports.getNextStatement = getNextStatement;
107 function getPreviousToken(node, sourceFile) {
108     var parent = node.parent;
109     while (parent !== undefined && parent.pos === node.pos)
110         parent = parent.parent;
111     if (parent === undefined)
112         return;
113     outer: while (true) {
114         var children = parent.getChildren(sourceFile);
115         for (var i = children.length - 1; i >= 0; --i) {
116             var child = children[i];
117             if (child.pos < node.pos && child.kind !== ts.SyntaxKind.JSDocComment) {
118                 if (isTokenKind(child.kind))
119                     return child;
120                 parent = child;
121                 continue outer;
122             }
123         }
124         return;
125     }
126 }
127 exports.getPreviousToken = getPreviousToken;
128 function getNextToken(node, sourceFile) {
129     if (sourceFile === void 0) { sourceFile = node.getSourceFile(); }
130     if (node.kind === ts.SyntaxKind.SourceFile || node.kind === ts.SyntaxKind.EndOfFileToken)
131         return;
132     var end = node.end;
133     node = node.parent;
134     while (node.end === end) {
135         if (node.parent === undefined)
136             return node.endOfFileToken;
137         node = node.parent;
138     }
139     return getTokenAtPositionWorker(node, end, sourceFile);
140 }
141 exports.getNextToken = getNextToken;
142 function getTokenAtPosition(parent, pos, sourceFile) {
143     if (pos < parent.pos || pos >= parent.end)
144         return;
145     if (isTokenKind(parent.kind))
146         return parent;
147     if (sourceFile === undefined)
148         sourceFile = parent.getSourceFile();
149     return getTokenAtPositionWorker(parent, pos, sourceFile);
150 }
151 exports.getTokenAtPosition = getTokenAtPosition;
152 function getTokenAtPositionWorker(node, pos, sourceFile) {
153     outer: while (true) {
154         for (var _i = 0, _a = node.getChildren(sourceFile); _i < _a.length; _i++) {
155             var child = _a[_i];
156             if (child.end > pos && child.kind !== ts.SyntaxKind.JSDocComment) {
157                 if (isTokenKind(child.kind))
158                     return child;
159                 node = child;
160                 continue outer;
161             }
162         }
163         return;
164     }
165 }
166 function getCommentAtPosition(sourceFile, pos, parent) {
167     if (parent === void 0) { parent = sourceFile; }
168     var token = getTokenAtPosition(parent, pos, sourceFile);
169     if (token === undefined || token.kind === ts.SyntaxKind.JsxText || pos >= token.end - (ts.tokenToString(token.kind) || '').length)
170         return;
171     var startPos = token.pos === 0
172         ? (ts.getShebang(sourceFile.text) || '').length
173         : token.pos;
174     return startPos !== 0 && ts.forEachTrailingCommentRange(sourceFile.text, startPos, commentAtPositionCallback, pos) ||
175         ts.forEachLeadingCommentRange(sourceFile.text, startPos, commentAtPositionCallback, pos);
176 }
177 exports.getCommentAtPosition = getCommentAtPosition;
178 function commentAtPositionCallback(pos, end, kind, _nl, at) {
179     return at >= pos && at < end ? { pos: pos, end: end, kind: kind } : undefined;
180 }
181 function isPositionInComment(sourceFile, pos, parent) {
182     return getCommentAtPosition(sourceFile, pos, parent) !== undefined;
183 }
184 exports.isPositionInComment = isPositionInComment;
185 function getWrappedNodeAtPosition(wrap, pos) {
186     if (wrap.node.pos > pos || wrap.node.end <= pos)
187         return;
188     outer: while (true) {
189         for (var _i = 0, _a = wrap.children; _i < _a.length; _i++) {
190             var child = _a[_i];
191             if (child.node.pos > pos)
192                 return wrap;
193             if (child.node.end > pos) {
194                 wrap = child;
195                 continue outer;
196             }
197         }
198         return wrap;
199     }
200 }
201 exports.getWrappedNodeAtPosition = getWrappedNodeAtPosition;
202 function getPropertyName(propertyName) {
203     if (propertyName.kind === ts.SyntaxKind.ComputedPropertyName) {
204         if (!node_1.isLiteralExpression(propertyName.expression))
205             return;
206         return propertyName.expression.text;
207     }
208     return propertyName.kind === ts.SyntaxKind.Identifier ? getIdentifierText(propertyName) : propertyName.text;
209 }
210 exports.getPropertyName = getPropertyName;
211 function forEachDestructuringIdentifier(pattern, fn) {
212     for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) {
213         var element = _a[_i];
214         if (element.kind !== ts.SyntaxKind.BindingElement)
215             continue;
216         var result = void 0;
217         if (element.name.kind === ts.SyntaxKind.Identifier) {
218             result = fn(element);
219         }
220         else {
221             result = forEachDestructuringIdentifier(element.name, fn);
222         }
223         if (result)
224             return result;
225     }
226 }
227 exports.forEachDestructuringIdentifier = forEachDestructuringIdentifier;
228 function forEachDeclaredVariable(declarationList, cb) {
229     for (var _i = 0, _a = declarationList.declarations; _i < _a.length; _i++) {
230         var declaration = _a[_i];
231         var result = void 0;
232         if (declaration.name.kind === ts.SyntaxKind.Identifier) {
233             result = cb(declaration);
234         }
235         else {
236             result = forEachDestructuringIdentifier(declaration.name, cb);
237         }
238         if (result)
239             return result;
240     }
241 }
242 exports.forEachDeclaredVariable = forEachDeclaredVariable;
243 var VariableDeclarationKind;
244 (function (VariableDeclarationKind) {
245     VariableDeclarationKind[VariableDeclarationKind["Var"] = 0] = "Var";
246     VariableDeclarationKind[VariableDeclarationKind["Let"] = 1] = "Let";
247     VariableDeclarationKind[VariableDeclarationKind["Const"] = 2] = "Const";
248 })(VariableDeclarationKind = exports.VariableDeclarationKind || (exports.VariableDeclarationKind = {}));
249 function getVariableDeclarationKind(declarationList) {
250     if (declarationList.flags & ts.NodeFlags.Let)
251         return 1;
252     if (declarationList.flags & ts.NodeFlags.Const)
253         return 2;
254     return 0;
255 }
256 exports.getVariableDeclarationKind = getVariableDeclarationKind;
257 function isBlockScopedVariableDeclarationList(declarationList) {
258     return (declarationList.flags & ts.NodeFlags.BlockScoped) !== 0;
259 }
260 exports.isBlockScopedVariableDeclarationList = isBlockScopedVariableDeclarationList;
261 function isBlockScopedVariableDeclaration(declaration) {
262     var parent = declaration.parent;
263     return parent.kind === ts.SyntaxKind.CatchClause ||
264         isBlockScopedVariableDeclarationList(parent);
265 }
266 exports.isBlockScopedVariableDeclaration = isBlockScopedVariableDeclaration;
267 var ScopeBoundary;
268 (function (ScopeBoundary) {
269     ScopeBoundary[ScopeBoundary["None"] = 0] = "None";
270     ScopeBoundary[ScopeBoundary["Function"] = 1] = "Function";
271     ScopeBoundary[ScopeBoundary["Block"] = 2] = "Block";
272 })(ScopeBoundary = exports.ScopeBoundary || (exports.ScopeBoundary = {}));
273 function isScopeBoundary(node) {
274     if (isFunctionScopeBoundary(node))
275         return 1;
276     if (isBlockScopeBoundary(node))
277         return 2;
278     return 0;
279 }
280 exports.isScopeBoundary = isScopeBoundary;
281 function isFunctionScopeBoundary(node) {
282     switch (node.kind) {
283         case ts.SyntaxKind.FunctionExpression:
284         case ts.SyntaxKind.ArrowFunction:
285         case ts.SyntaxKind.Constructor:
286         case ts.SyntaxKind.ModuleDeclaration:
287         case ts.SyntaxKind.ClassDeclaration:
288         case ts.SyntaxKind.ClassExpression:
289         case ts.SyntaxKind.EnumDeclaration:
290         case ts.SyntaxKind.MethodDeclaration:
291         case ts.SyntaxKind.FunctionDeclaration:
292         case ts.SyntaxKind.GetAccessor:
293         case ts.SyntaxKind.SetAccessor:
294         case ts.SyntaxKind.InterfaceDeclaration:
295         case ts.SyntaxKind.TypeAliasDeclaration:
296         case ts.SyntaxKind.MethodSignature:
297         case ts.SyntaxKind.CallSignature:
298         case ts.SyntaxKind.ConstructSignature:
299         case ts.SyntaxKind.ConstructorType:
300         case ts.SyntaxKind.FunctionType:
301         case ts.SyntaxKind.MappedType:
302         case ts.SyntaxKind.ConditionalType:
303             return true;
304         case ts.SyntaxKind.SourceFile:
305             return ts.isExternalModule(node);
306         default:
307             return false;
308     }
309 }
310 exports.isFunctionScopeBoundary = isFunctionScopeBoundary;
311 function isBlockScopeBoundary(node) {
312     switch (node.kind) {
313         case ts.SyntaxKind.Block:
314             var parent = node.parent;
315             return parent.kind !== ts.SyntaxKind.CatchClause &&
316                 (parent.kind === ts.SyntaxKind.SourceFile ||
317                     !isFunctionScopeBoundary(parent));
318         case ts.SyntaxKind.ForStatement:
319         case ts.SyntaxKind.ForInStatement:
320         case ts.SyntaxKind.ForOfStatement:
321         case ts.SyntaxKind.CaseBlock:
322         case ts.SyntaxKind.CatchClause:
323             return true;
324         default:
325             return false;
326     }
327 }
328 exports.isBlockScopeBoundary = isBlockScopeBoundary;
329 function hasOwnThisReference(node) {
330     switch (node.kind) {
331         case ts.SyntaxKind.ClassDeclaration:
332         case ts.SyntaxKind.ClassExpression:
333         case ts.SyntaxKind.FunctionExpression:
334             return true;
335         case ts.SyntaxKind.FunctionDeclaration:
336             return node.body !== undefined;
337         case ts.SyntaxKind.MethodDeclaration:
338         case ts.SyntaxKind.GetAccessor:
339         case ts.SyntaxKind.SetAccessor:
340             return node.parent.kind === ts.SyntaxKind.ObjectLiteralExpression;
341         default:
342             return false;
343     }
344 }
345 exports.hasOwnThisReference = hasOwnThisReference;
346 function isFunctionWithBody(node) {
347     switch (node.kind) {
348         case ts.SyntaxKind.GetAccessor:
349         case ts.SyntaxKind.SetAccessor:
350         case ts.SyntaxKind.FunctionDeclaration:
351         case ts.SyntaxKind.MethodDeclaration:
352         case ts.SyntaxKind.Constructor:
353             return node.body !== undefined;
354         case ts.SyntaxKind.FunctionExpression:
355         case ts.SyntaxKind.ArrowFunction:
356             return true;
357         default:
358             return false;
359     }
360 }
361 exports.isFunctionWithBody = isFunctionWithBody;
362 function forEachToken(node, cb, sourceFile) {
363     if (sourceFile === void 0) { sourceFile = node.getSourceFile(); }
364     return (function iterate(child) {
365         if (isTokenKind(child.kind))
366             return cb(child);
367         if (child.kind !== ts.SyntaxKind.JSDocComment)
368             return child.getChildren(sourceFile).forEach(iterate);
369     })(node);
370 }
371 exports.forEachToken = forEachToken;
372 function forEachTokenWithTrivia(node, cb, sourceFile) {
373     if (sourceFile === void 0) { sourceFile = node.getSourceFile(); }
374     var fullText = sourceFile.text;
375     var scanner = ts.createScanner(sourceFile.languageVersion, false, sourceFile.languageVariant, fullText);
376     return forEachToken(node, function (token) {
377         var tokenStart = token.kind === ts.SyntaxKind.JsxText || token.pos === token.end ? token.pos : token.getStart(sourceFile);
378         if (tokenStart !== token.pos) {
379             scanner.setTextPos(token.pos);
380             var kind = scanner.scan();
381             var pos = scanner.getTokenPos();
382             while (pos < tokenStart) {
383                 var textPos = scanner.getTextPos();
384                 cb(fullText, kind, { pos: pos, end: textPos }, token.parent);
385                 if (textPos === tokenStart)
386                     break;
387                 kind = scanner.scan();
388                 pos = scanner.getTokenPos();
389             }
390         }
391         return cb(fullText, token.kind, { end: token.end, pos: tokenStart }, token.parent);
392     }, sourceFile);
393 }
394 exports.forEachTokenWithTrivia = forEachTokenWithTrivia;
395 function forEachComment(node, cb, sourceFile) {
396     if (sourceFile === void 0) { sourceFile = node.getSourceFile(); }
397     var fullText = sourceFile.text;
398     var notJsx = sourceFile.languageVariant !== ts.LanguageVariant.JSX;
399     return forEachToken(node, function (token) {
400         if (token.pos === token.end)
401             return;
402         if (token.kind !== ts.SyntaxKind.JsxText)
403             ts.forEachLeadingCommentRange(fullText, token.pos === 0 ? (ts.getShebang(fullText) || '').length : token.pos, commentCallback);
404         if (notJsx || canHaveTrailingTrivia(token))
405             return ts.forEachTrailingCommentRange(fullText, token.end, commentCallback);
406     }, sourceFile);
407     function commentCallback(pos, end, kind) {
408         cb(fullText, { pos: pos, end: end, kind: kind });
409     }
410 }
411 exports.forEachComment = forEachComment;
412 function canHaveTrailingTrivia(token) {
413     switch (token.kind) {
414         case ts.SyntaxKind.CloseBraceToken:
415             return token.parent.kind !== ts.SyntaxKind.JsxExpression || !isJsxElementOrFragment(token.parent.parent);
416         case ts.SyntaxKind.GreaterThanToken:
417             switch (token.parent.kind) {
418                 case ts.SyntaxKind.JsxOpeningElement:
419                     return token.end !== token.parent.end;
420                 case ts.SyntaxKind.JsxOpeningFragment:
421                     return false;
422                 case ts.SyntaxKind.JsxSelfClosingElement:
423                     return token.end !== token.parent.end ||
424                         !isJsxElementOrFragment(token.parent.parent);
425                 case ts.SyntaxKind.JsxClosingElement:
426                 case ts.SyntaxKind.JsxClosingFragment:
427                     return !isJsxElementOrFragment(token.parent.parent.parent);
428             }
429     }
430     return true;
431 }
432 function isJsxElementOrFragment(node) {
433     return node.kind === ts.SyntaxKind.JsxElement || node.kind === ts.SyntaxKind.JsxFragment;
434 }
435 function getLineRanges(sourceFile) {
436     var lineStarts = sourceFile.getLineStarts();
437     var result = [];
438     var length = lineStarts.length;
439     var sourceText = sourceFile.text;
440     var pos = 0;
441     for (var i = 1; i < length; ++i) {
442         var end = lineStarts[i];
443         var lineEnd = end;
444         for (; lineEnd > pos; --lineEnd)
445             if (!ts.isLineBreak(sourceText.charCodeAt(lineEnd - 1)))
446                 break;
447         result.push({
448             pos: pos,
449             end: end,
450             contentLength: lineEnd - pos,
451         });
452         pos = end;
453     }
454     result.push({
455         pos: pos,
456         end: sourceFile.end,
457         contentLength: sourceFile.end - pos,
458     });
459     return result;
460 }
461 exports.getLineRanges = getLineRanges;
462 function getLineBreakStyle(sourceFile) {
463     var lineStarts = sourceFile.getLineStarts();
464     return lineStarts.length === 1 || lineStarts[1] < 2 || sourceFile.text[lineStarts[1] - 2] !== '\r'
465         ? '\n'
466         : '\r\n';
467 }
468 exports.getLineBreakStyle = getLineBreakStyle;
469 var cachedScanner;
470 function scanToken(text) {
471     if (cachedScanner === undefined)
472         cachedScanner = ts.createScanner(ts.ScriptTarget.Latest, false);
473     cachedScanner.setText(text);
474     cachedScanner.scan();
475     return cachedScanner;
476 }
477 function isValidIdentifier(text) {
478     var scan = scanToken(text);
479     return scan.isIdentifier() && scan.getTextPos() === text.length && scan.getTokenPos() === 0;
480 }
481 exports.isValidIdentifier = isValidIdentifier;
482 function isValidPropertyAccess(text) {
483     if (!ts.isIdentifierStart(text.charCodeAt(0), ts.ScriptTarget.Latest))
484         return false;
485     for (var i = 1; i < text.length; ++i)
486         if (!ts.isIdentifierPart(text.charCodeAt(i), ts.ScriptTarget.Latest))
487             return false;
488     return true;
489 }
490 exports.isValidPropertyAccess = isValidPropertyAccess;
491 function isValidPropertyName(text) {
492     if (isValidPropertyAccess(text))
493         return true;
494     var scan = scanToken(text);
495     return scan.getTextPos() === text.length &&
496         scan.getToken() === ts.SyntaxKind.NumericLiteral && scan.getTokenValue() === text;
497 }
498 exports.isValidPropertyName = isValidPropertyName;
499 function isValidNumericLiteral(text) {
500     var scan = scanToken(text);
501     return scan.getToken() === ts.SyntaxKind.NumericLiteral && scan.getTextPos() === text.length && scan.getTokenPos() === 0;
502 }
503 exports.isValidNumericLiteral = isValidNumericLiteral;
504 function isSameLine(sourceFile, pos1, pos2) {
505     return ts.getLineAndCharacterOfPosition(sourceFile, pos1).line === ts.getLineAndCharacterOfPosition(sourceFile, pos2).line;
506 }
507 exports.isSameLine = isSameLine;
508 var SideEffectOptions;
509 (function (SideEffectOptions) {
510     SideEffectOptions[SideEffectOptions["None"] = 0] = "None";
511     SideEffectOptions[SideEffectOptions["TaggedTemplate"] = 1] = "TaggedTemplate";
512     SideEffectOptions[SideEffectOptions["Constructor"] = 2] = "Constructor";
513     SideEffectOptions[SideEffectOptions["JsxElement"] = 4] = "JsxElement";
514 })(SideEffectOptions = exports.SideEffectOptions || (exports.SideEffectOptions = {}));
515 function hasSideEffects(node, options) {
516     switch (node.kind) {
517         case ts.SyntaxKind.CallExpression:
518         case ts.SyntaxKind.PostfixUnaryExpression:
519         case ts.SyntaxKind.AwaitExpression:
520         case ts.SyntaxKind.YieldExpression:
521         case ts.SyntaxKind.DeleteExpression:
522             return true;
523         case ts.SyntaxKind.TypeAssertionExpression:
524         case ts.SyntaxKind.AsExpression:
525         case ts.SyntaxKind.ParenthesizedExpression:
526         case ts.SyntaxKind.NonNullExpression:
527         case ts.SyntaxKind.VoidExpression:
528         case ts.SyntaxKind.TypeOfExpression:
529         case ts.SyntaxKind.PropertyAccessExpression:
530         case ts.SyntaxKind.SpreadElement:
531         case ts.SyntaxKind.PartiallyEmittedExpression:
532             return hasSideEffects(node.expression, options);
533         case ts.SyntaxKind.BinaryExpression:
534             return isAssignmentKind(node.operatorToken.kind) ||
535                 hasSideEffects(node.left, options) ||
536                 hasSideEffects(node.right, options);
537         case ts.SyntaxKind.PrefixUnaryExpression:
538             switch (node.operator) {
539                 case ts.SyntaxKind.PlusPlusToken:
540                 case ts.SyntaxKind.MinusMinusToken:
541                     return true;
542                 default:
543                     return hasSideEffects(node.operand, options);
544             }
545         case ts.SyntaxKind.ElementAccessExpression:
546             return hasSideEffects(node.expression, options) ||
547                 node.argumentExpression !== undefined &&
548                     hasSideEffects(node.argumentExpression, options);
549         case ts.SyntaxKind.ConditionalExpression:
550             return hasSideEffects(node.condition, options) ||
551                 hasSideEffects(node.whenTrue, options) ||
552                 hasSideEffects(node.whenFalse, options);
553         case ts.SyntaxKind.NewExpression:
554             if (options & 2 || hasSideEffects(node.expression, options))
555                 return true;
556             if (node.arguments !== undefined)
557                 for (var _i = 0, _a = node.arguments; _i < _a.length; _i++) {
558                     var child = _a[_i];
559                     if (hasSideEffects(child, options))
560                         return true;
561                 }
562             return false;
563         case ts.SyntaxKind.TaggedTemplateExpression:
564             if (options & 1 || hasSideEffects(node.tag, options))
565                 return true;
566             if (node.template.kind === ts.SyntaxKind.NoSubstitutionTemplateLiteral)
567                 return false;
568             node = node.template;
569         case ts.SyntaxKind.TemplateExpression:
570             for (var _b = 0, _c = node.templateSpans; _b < _c.length; _b++) {
571                 var child = _c[_b];
572                 if (hasSideEffects(child.expression, options))
573                     return true;
574             }
575             return false;
576         case ts.SyntaxKind.ClassExpression:
577             return classExpressionHasSideEffects(node, options);
578         case ts.SyntaxKind.ArrayLiteralExpression:
579             for (var _d = 0, _e = node.elements; _d < _e.length; _d++) {
580                 var child = _e[_d];
581                 if (hasSideEffects(child, options))
582                     return true;
583             }
584             return false;
585         case ts.SyntaxKind.ObjectLiteralExpression:
586             for (var _f = 0, _g = node.properties; _f < _g.length; _f++) {
587                 var child = _g[_f];
588                 if (child.name !== undefined && child.name.kind === ts.SyntaxKind.ComputedPropertyName &&
589                     hasSideEffects(child.name.expression, options))
590                     return true;
591                 switch (child.kind) {
592                     case ts.SyntaxKind.PropertyAssignment:
593                         if (hasSideEffects(child.initializer, options))
594                             return true;
595                         break;
596                     case ts.SyntaxKind.SpreadAssignment:
597                         if (hasSideEffects(child.expression, options))
598                             return true;
599                 }
600             }
601             return false;
602         case ts.SyntaxKind.JsxExpression:
603             return node.expression !== undefined && hasSideEffects(node.expression, options);
604         case ts.SyntaxKind.JsxElement:
605         case ts.SyntaxKind.JsxFragment:
606             for (var _h = 0, _j = node.children; _h < _j.length; _h++) {
607                 var child = _j[_h];
608                 if (child.kind !== ts.SyntaxKind.JsxText && hasSideEffects(child, options))
609                     return true;
610             }
611             if (node.kind === ts.SyntaxKind.JsxFragment)
612                 return false;
613             node = node.openingElement;
614         case ts.SyntaxKind.JsxSelfClosingElement:
615         case ts.SyntaxKind.JsxOpeningElement:
616             if (options & 4)
617                 return true;
618             for (var _k = 0, _l = getJsxAttributes(node); _k < _l.length; _k++) {
619                 var child = _l[_k];
620                 if (child.kind === ts.SyntaxKind.JsxSpreadAttribute) {
621                     if (hasSideEffects(child.expression, options))
622                         return true;
623                 }
624                 else if (child.initializer !== undefined && hasSideEffects(child.initializer, options)) {
625                     return true;
626                 }
627             }
628             return false;
629         case ts.SyntaxKind.CommaListExpression:
630             for (var _m = 0, _o = node.elements; _m < _o.length; _m++) {
631                 var child = _o[_m];
632                 if (hasSideEffects(child, options))
633                     return true;
634             }
635             return false;
636         default:
637             return false;
638     }
639 }
640 exports.hasSideEffects = hasSideEffects;
641 function getJsxAttributes(openElement) {
642     var attributes = openElement.attributes;
643     return Array.isArray(attributes) ? attributes : attributes.properties;
644 }
645 function classExpressionHasSideEffects(node, options) {
646     if (node.heritageClauses !== undefined && node.heritageClauses[0].token === ts.SyntaxKind.ExtendsKeyword)
647         for (var _i = 0, _a = node.heritageClauses[0].types; _i < _a.length; _i++) {
648             var base = _a[_i];
649             if (hasSideEffects(base.expression, options))
650                 return true;
651         }
652     for (var _b = 0, _c = node.members; _b < _c.length; _b++) {
653         var child = _c[_b];
654         if (child.name !== undefined && child.name.kind === ts.SyntaxKind.ComputedPropertyName &&
655             hasSideEffects(child.name.expression, options) ||
656             node_1.isPropertyDeclaration(child) && child.initializer !== undefined &&
657                 hasSideEffects(child.initializer, options))
658             return true;
659     }
660     return false;
661 }
662 function getDeclarationOfBindingElement(node) {
663     var parent = node.parent.parent;
664     while (parent.kind === ts.SyntaxKind.BindingElement)
665         parent = parent.parent.parent;
666     return parent;
667 }
668 exports.getDeclarationOfBindingElement = getDeclarationOfBindingElement;
669 function isExpressionValueUsed(node) {
670     while (true) {
671         var parent = node.parent;
672         switch (parent.kind) {
673             case ts.SyntaxKind.CallExpression:
674             case ts.SyntaxKind.NewExpression:
675             case ts.SyntaxKind.ElementAccessExpression:
676             case ts.SyntaxKind.WhileStatement:
677             case ts.SyntaxKind.DoStatement:
678             case ts.SyntaxKind.WithStatement:
679             case ts.SyntaxKind.ThrowStatement:
680             case ts.SyntaxKind.ReturnStatement:
681             case ts.SyntaxKind.JsxExpression:
682             case ts.SyntaxKind.JsxSpreadAttribute:
683             case ts.SyntaxKind.JsxElement:
684             case ts.SyntaxKind.JsxFragment:
685             case ts.SyntaxKind.JsxSelfClosingElement:
686             case ts.SyntaxKind.ComputedPropertyName:
687             case ts.SyntaxKind.ArrowFunction:
688             case ts.SyntaxKind.ExportSpecifier:
689             case ts.SyntaxKind.ExportAssignment:
690             case ts.SyntaxKind.ImportDeclaration:
691             case ts.SyntaxKind.ExternalModuleReference:
692             case ts.SyntaxKind.Decorator:
693             case ts.SyntaxKind.TaggedTemplateExpression:
694             case ts.SyntaxKind.TemplateSpan:
695             case ts.SyntaxKind.ExpressionWithTypeArguments:
696             case ts.SyntaxKind.TypeOfExpression:
697             case ts.SyntaxKind.AwaitExpression:
698             case ts.SyntaxKind.YieldExpression:
699             case ts.SyntaxKind.LiteralType:
700             case ts.SyntaxKind.JsxAttributes:
701             case ts.SyntaxKind.JsxOpeningElement:
702             case ts.SyntaxKind.JsxClosingElement:
703             case ts.SyntaxKind.IfStatement:
704             case ts.SyntaxKind.CaseClause:
705             case ts.SyntaxKind.SwitchStatement:
706                 return true;
707             case ts.SyntaxKind.PropertyAccessExpression:
708                 return parent.expression === node;
709             case ts.SyntaxKind.QualifiedName:
710                 return parent.left === node;
711             case ts.SyntaxKind.ShorthandPropertyAssignment:
712                 return parent.objectAssignmentInitializer === node ||
713                     !isInDestructuringAssignment(parent);
714             case ts.SyntaxKind.PropertyAssignment:
715                 return parent.initializer === node && !isInDestructuringAssignment(parent);
716             case ts.SyntaxKind.SpreadAssignment:
717             case ts.SyntaxKind.SpreadElement:
718             case ts.SyntaxKind.ArrayLiteralExpression:
719                 return !isInDestructuringAssignment(parent);
720             case ts.SyntaxKind.ParenthesizedExpression:
721             case ts.SyntaxKind.AsExpression:
722             case ts.SyntaxKind.TypeAssertionExpression:
723             case ts.SyntaxKind.PostfixUnaryExpression:
724             case ts.SyntaxKind.PrefixUnaryExpression:
725             case ts.SyntaxKind.NonNullExpression:
726                 node = parent;
727                 break;
728             case ts.SyntaxKind.ForStatement:
729                 return parent.condition === node;
730             case ts.SyntaxKind.ForInStatement:
731             case ts.SyntaxKind.ForOfStatement:
732                 return parent.expression === node;
733             case ts.SyntaxKind.ConditionalExpression:
734                 if (parent.condition === node)
735                     return true;
736                 node = parent;
737                 break;
738             case ts.SyntaxKind.PropertyDeclaration:
739             case ts.SyntaxKind.BindingElement:
740             case ts.SyntaxKind.VariableDeclaration:
741             case ts.SyntaxKind.Parameter:
742             case ts.SyntaxKind.EnumMember:
743                 return parent.initializer === node;
744             case ts.SyntaxKind.ImportEqualsDeclaration:
745                 return parent.moduleReference === node;
746             case ts.SyntaxKind.CommaListExpression:
747                 if (parent.elements[parent.elements.length - 1] !== node)
748                     return false;
749                 node = parent;
750                 break;
751             case ts.SyntaxKind.BinaryExpression:
752                 if (parent.right === node) {
753                     if (parent.operatorToken.kind === ts.SyntaxKind.CommaToken) {
754                         node = parent;
755                         break;
756                     }
757                     return true;
758                 }
759                 switch (parent.operatorToken.kind) {
760                     case ts.SyntaxKind.CommaToken:
761                     case ts.SyntaxKind.EqualsToken:
762                         return false;
763                     case ts.SyntaxKind.EqualsEqualsEqualsToken:
764                     case ts.SyntaxKind.EqualsEqualsToken:
765                     case ts.SyntaxKind.ExclamationEqualsEqualsToken:
766                     case ts.SyntaxKind.ExclamationEqualsToken:
767                     case ts.SyntaxKind.InstanceOfKeyword:
768                     case ts.SyntaxKind.PlusToken:
769                     case ts.SyntaxKind.MinusToken:
770                     case ts.SyntaxKind.AsteriskToken:
771                     case ts.SyntaxKind.SlashToken:
772                     case ts.SyntaxKind.PercentToken:
773                     case ts.SyntaxKind.AsteriskAsteriskToken:
774                     case ts.SyntaxKind.GreaterThanToken:
775                     case ts.SyntaxKind.GreaterThanGreaterThanToken:
776                     case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken:
777                     case ts.SyntaxKind.GreaterThanEqualsToken:
778                     case ts.SyntaxKind.LessThanToken:
779                     case ts.SyntaxKind.LessThanLessThanToken:
780                     case ts.SyntaxKind.LessThanEqualsToken:
781                     case ts.SyntaxKind.AmpersandToken:
782                     case ts.SyntaxKind.BarToken:
783                     case ts.SyntaxKind.CaretToken:
784                     case ts.SyntaxKind.BarBarToken:
785                     case ts.SyntaxKind.AmpersandAmpersandToken:
786                     case ts.SyntaxKind.InKeyword:
787                         return true;
788                     default:
789                         node = parent;
790                 }
791                 break;
792             default:
793                 return false;
794         }
795     }
796 }
797 exports.isExpressionValueUsed = isExpressionValueUsed;
798 function isInDestructuringAssignment(node) {
799     switch (node.kind) {
800         case ts.SyntaxKind.ShorthandPropertyAssignment:
801             if (node.objectAssignmentInitializer !== undefined)
802                 return true;
803         case ts.SyntaxKind.PropertyAssignment:
804         case ts.SyntaxKind.SpreadAssignment:
805             node = node.parent;
806             break;
807         case ts.SyntaxKind.SpreadElement:
808             if (node.parent.kind !== ts.SyntaxKind.ArrayLiteralExpression)
809                 return false;
810             node = node.parent;
811     }
812     while (true) {
813         switch (node.parent.kind) {
814             case ts.SyntaxKind.BinaryExpression:
815                 return node.parent.left === node &&
816                     node.parent.operatorToken.kind === ts.SyntaxKind.EqualsToken;
817             case ts.SyntaxKind.ForOfStatement:
818                 return node.parent.initializer === node;
819             case ts.SyntaxKind.ArrayLiteralExpression:
820             case ts.SyntaxKind.ObjectLiteralExpression:
821                 node = node.parent;
822                 break;
823             case ts.SyntaxKind.SpreadAssignment:
824             case ts.SyntaxKind.PropertyAssignment:
825                 node = node.parent.parent;
826                 break;
827             case ts.SyntaxKind.SpreadElement:
828                 if (node.parent.parent.kind !== ts.SyntaxKind.ArrayLiteralExpression)
829                     return false;
830                 node = node.parent.parent;
831                 break;
832             default:
833                 return false;
834         }
835     }
836 }
837 function isReassignmentTarget(node) {
838     var parent = node.parent;
839     switch (parent.kind) {
840         case ts.SyntaxKind.PostfixUnaryExpression:
841         case ts.SyntaxKind.DeleteExpression:
842             return true;
843         case ts.SyntaxKind.PrefixUnaryExpression:
844             return parent.operator === ts.SyntaxKind.PlusPlusToken ||
845                 parent.operator === ts.SyntaxKind.MinusMinusToken;
846         case ts.SyntaxKind.BinaryExpression:
847             return parent.left === node &&
848                 isAssignmentKind(parent.operatorToken.kind);
849         case ts.SyntaxKind.ShorthandPropertyAssignment:
850             return parent.name === node &&
851                 isInDestructuringAssignment(parent);
852         case ts.SyntaxKind.PropertyAssignment:
853             return parent.initializer === node &&
854                 isInDestructuringAssignment(parent);
855         case ts.SyntaxKind.ArrayLiteralExpression:
856         case ts.SyntaxKind.SpreadElement:
857         case ts.SyntaxKind.SpreadAssignment:
858             return isInDestructuringAssignment(parent);
859         case ts.SyntaxKind.ParenthesizedExpression:
860         case ts.SyntaxKind.NonNullExpression:
861         case ts.SyntaxKind.TypeAssertionExpression:
862         case ts.SyntaxKind.AsExpression:
863             return isReassignmentTarget(parent);
864         case ts.SyntaxKind.ForOfStatement:
865         case ts.SyntaxKind.ForInStatement:
866             return parent.initializer === node;
867     }
868     return false;
869 }
870 exports.isReassignmentTarget = isReassignmentTarget;
871 function getIdentifierText(node) {
872     return ts.unescapeIdentifier ? ts.unescapeIdentifier(node.text) : node.text;
873 }
874 exports.getIdentifierText = getIdentifierText;
875 function canHaveJsDoc(node) {
876     var kind = node.kind;
877     switch (kind) {
878         case ts.SyntaxKind.Parameter:
879         case ts.SyntaxKind.CallSignature:
880         case ts.SyntaxKind.ConstructSignature:
881         case ts.SyntaxKind.MethodSignature:
882         case ts.SyntaxKind.PropertySignature:
883         case ts.SyntaxKind.ArrowFunction:
884         case ts.SyntaxKind.ParenthesizedExpression:
885         case ts.SyntaxKind.SpreadAssignment:
886         case ts.SyntaxKind.ShorthandPropertyAssignment:
887         case ts.SyntaxKind.PropertyAssignment:
888         case ts.SyntaxKind.FunctionExpression:
889         case ts.SyntaxKind.FunctionDeclaration:
890         case ts.SyntaxKind.LabeledStatement:
891         case ts.SyntaxKind.ExpressionStatement:
892         case ts.SyntaxKind.VariableStatement:
893         case ts.SyntaxKind.Constructor:
894         case ts.SyntaxKind.MethodDeclaration:
895         case ts.SyntaxKind.PropertyDeclaration:
896         case ts.SyntaxKind.GetAccessor:
897         case ts.SyntaxKind.SetAccessor:
898         case ts.SyntaxKind.ClassDeclaration:
899         case ts.SyntaxKind.ClassExpression:
900         case ts.SyntaxKind.InterfaceDeclaration:
901         case ts.SyntaxKind.TypeAliasDeclaration:
902         case ts.SyntaxKind.EnumMember:
903         case ts.SyntaxKind.EnumDeclaration:
904         case ts.SyntaxKind.ModuleDeclaration:
905         case ts.SyntaxKind.ImportEqualsDeclaration:
906         case ts.SyntaxKind.IndexSignature:
907         case ts.SyntaxKind.FunctionType:
908         case ts.SyntaxKind.ConstructorType:
909         case ts.SyntaxKind.JSDocFunctionType:
910         case ts.SyntaxKind.EndOfFileToken:
911             return true;
912         default:
913             return false;
914     }
915 }
916 exports.canHaveJsDoc = canHaveJsDoc;
917 function getJsDoc(node, sourceFile) {
918     if (node.kind === ts.SyntaxKind.EndOfFileToken)
919         return parseJsDocWorker(node, sourceFile || node.parent);
920     var result = [];
921     for (var _i = 0, _a = node.getChildren(sourceFile); _i < _a.length; _i++) {
922         var child = _a[_i];
923         if (!node_1.isJsDoc(child))
924             break;
925         result.push(child);
926     }
927     return result;
928 }
929 exports.getJsDoc = getJsDoc;
930 function parseJsDocOfNode(node, considerTrailingComments, sourceFile) {
931     if (sourceFile === void 0) { sourceFile = node.getSourceFile(); }
932     if (canHaveJsDoc(node) && node.kind !== ts.SyntaxKind.EndOfFileToken) {
933         var result = getJsDoc(node, sourceFile);
934         if (result.length !== 0 || !considerTrailingComments)
935             return result;
936     }
937     return parseJsDocWorker(node, sourceFile, considerTrailingComments);
938 }
939 exports.parseJsDocOfNode = parseJsDocOfNode;
940 function parseJsDocWorker(node, sourceFile, considerTrailingComments) {
941     var nodeStart = node.getStart(sourceFile);
942     var start = ts[considerTrailingComments && isSameLine(sourceFile, node.pos, nodeStart)
943         ? 'forEachTrailingCommentRange'
944         : 'forEachLeadingCommentRange'](sourceFile.text, node.pos, function (pos, _end, kind) { return kind === ts.SyntaxKind.MultiLineCommentTrivia && sourceFile.text[pos + 2] === '*' ? { pos: pos } : undefined; });
945     if (start === undefined)
946         return [];
947     var startPos = start.pos;
948     var text = sourceFile.text.slice(startPos, nodeStart);
949     var newSourceFile = ts.createSourceFile('jsdoc.ts', text + "var a;", sourceFile.languageVersion);
950     var result = getJsDoc(newSourceFile.statements[0], newSourceFile);
951     for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {
952         var doc = result_1[_i];
953         updateNode(doc, node);
954     }
955     return result;
956     function updateNode(n, parent) {
957         n.pos += startPos;
958         n.end += startPos;
959         n.parent = parent;
960         return ts.forEachChild(n, function (child) { return updateNode(child, n); }, function (children) {
961             children.pos += startPos;
962             children.end += startPos;
963             for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {
964                 var child = children_1[_i];
965                 updateNode(child, n);
966             }
967         });
968     }
969 }
970 var ImportKind;
971 (function (ImportKind) {
972     ImportKind[ImportKind["ImportDeclaration"] = 1] = "ImportDeclaration";
973     ImportKind[ImportKind["ImportEquals"] = 2] = "ImportEquals";
974     ImportKind[ImportKind["ExportFrom"] = 4] = "ExportFrom";
975     ImportKind[ImportKind["DynamicImport"] = 8] = "DynamicImport";
976     ImportKind[ImportKind["Require"] = 16] = "Require";
977     ImportKind[ImportKind["ImportType"] = 32] = "ImportType";
978     ImportKind[ImportKind["All"] = 63] = "All";
979     ImportKind[ImportKind["AllImports"] = 59] = "AllImports";
980     ImportKind[ImportKind["AllStaticImports"] = 3] = "AllStaticImports";
981     ImportKind[ImportKind["AllImportExpressions"] = 24] = "AllImportExpressions";
982     ImportKind[ImportKind["AllRequireLike"] = 18] = "AllRequireLike";
983     ImportKind[ImportKind["AllNestedImports"] = 56] = "AllNestedImports";
984 })(ImportKind = exports.ImportKind || (exports.ImportKind = {}));
985 var ImportOptions;
986 (function (ImportOptions) {
987     ImportOptions[ImportOptions["ImportDeclaration"] = 1] = "ImportDeclaration";
988     ImportOptions[ImportOptions["ImportEquals"] = 2] = "ImportEquals";
989     ImportOptions[ImportOptions["ExportFrom"] = 4] = "ExportFrom";
990     ImportOptions[ImportOptions["DynamicImport"] = 8] = "DynamicImport";
991     ImportOptions[ImportOptions["Require"] = 16] = "Require";
992     ImportOptions[ImportOptions["All"] = 31] = "All";
993     ImportOptions[ImportOptions["AllImports"] = 27] = "AllImports";
994     ImportOptions[ImportOptions["AllStaticImports"] = 3] = "AllStaticImports";
995     ImportOptions[ImportOptions["AllDynamic"] = 24] = "AllDynamic";
996     ImportOptions[ImportOptions["AllRequireLike"] = 18] = "AllRequireLike";
997 })(ImportOptions = exports.ImportOptions || (exports.ImportOptions = {}));
998 function findImports(sourceFile, options) {
999     return new ImportFinder(sourceFile, options).find();
1000 }
1001 exports.findImports = findImports;
1002 var ImportFinder = (function () {
1003     function ImportFinder(_sourceFile, _options) {
1004         var _this = this;
1005         this._sourceFile = _sourceFile;
1006         this._options = _options;
1007         this._result = [];
1008         this._findNested = function (node) {
1009             if (node_1.isCallExpression(node)) {
1010                 if (node.arguments.length === 1 &&
1011                     (node.expression.kind === ts.SyntaxKind.ImportKeyword && _this._options & 8 ||
1012                         _this._options & 16 && node.expression.kind === ts.SyntaxKind.Identifier &&
1013                             node.expression.text === 'require'))
1014                     _this._addImport(node.arguments[0]);
1015             }
1016             else if (node_1.isImportTypeNode(node) && node_1.isLiteralTypeNode(node.argument) && _this._options & 32) {
1017                 _this._addImport(node.argument.literal);
1018             }
1019             ts.forEachChild(node, _this._findNested);
1020         };
1021     }
1022     ImportFinder.prototype.find = function () {
1023         if (this._sourceFile.isDeclarationFile)
1024             this._options &= ~24;
1025         this._findImports(this._sourceFile.statements);
1026         return this._result;
1027     };
1028     ImportFinder.prototype._findImports = function (statements) {
1029         for (var _i = 0, statements_1 = statements; _i < statements_1.length; _i++) {
1030             var statement = statements_1[_i];
1031             if (node_1.isImportDeclaration(statement)) {
1032                 if (this._options & 1)
1033                     this._addImport(statement.moduleSpecifier);
1034             }
1035             else if (node_1.isImportEqualsDeclaration(statement)) {
1036                 if (this._options & 2 &&
1037                     statement.moduleReference.kind === ts.SyntaxKind.ExternalModuleReference &&
1038                     statement.moduleReference.expression !== undefined)
1039                     this._addImport(statement.moduleReference.expression);
1040             }
1041             else if (node_1.isExportDeclaration(statement)) {
1042                 if (statement.moduleSpecifier !== undefined && this._options & 4)
1043                     this._addImport(statement.moduleSpecifier);
1044             }
1045             else if (node_1.isModuleDeclaration(statement) &&
1046                 this._options & (3 | 4) &&
1047                 statement.body !== undefined && statement.name.kind === ts.SyntaxKind.StringLiteral &&
1048                 ts.isExternalModule(this._sourceFile)) {
1049                 this._findImports(statement.body.statements);
1050             }
1051             else if (this._options & 56) {
1052                 ts.forEachChild(statement, this._findNested);
1053             }
1054         }
1055     };
1056     ImportFinder.prototype._addImport = function (expression) {
1057         if (node_1.isTextualLiteral(expression))
1058             this._result.push(expression);
1059     };
1060     return ImportFinder;
1061 }());
1062 function isStatementInAmbientContext(node) {
1063     while (node.flags & ts.NodeFlags.NestedNamespace)
1064         node = node.parent;
1065     return hasModifier(node.modifiers, ts.SyntaxKind.DeclareKeyword) || isAmbientModuleBlock(node.parent);
1066 }
1067 exports.isStatementInAmbientContext = isStatementInAmbientContext;
1068 function isAmbientModuleBlock(node) {
1069     while (node.kind === ts.SyntaxKind.ModuleBlock) {
1070         do
1071             node = node.parent;
1072         while (node.flags & ts.NodeFlags.NestedNamespace);
1073         if (hasModifier(node.modifiers, ts.SyntaxKind.DeclareKeyword))
1074             return true;
1075         node = node.parent;
1076     }
1077     return false;
1078 }
1079 exports.isAmbientModuleBlock = isAmbientModuleBlock;
1080 function getIIFE(func) {
1081     var node = func.parent;
1082     while (node.kind === ts.SyntaxKind.ParenthesizedExpression)
1083         node = node.parent;
1084     return node_1.isCallExpression(node) && func.end <= node.expression.end ? node : undefined;
1085 }
1086 exports.getIIFE = getIIFE;
1087 function isStrictCompilerOptionEnabled(options, option) {
1088     return (options.strict ? options[option] !== false : options[option] === true) &&
1089         (option !== 'strictPropertyInitialization' || isStrictCompilerOptionEnabled(options, 'strictNullChecks'));
1090 }
1091 exports.isStrictCompilerOptionEnabled = isStrictCompilerOptionEnabled;
1092 function isCompilerOptionEnabled(options, option) {
1093     switch (option) {
1094         case 'stripInternal':
1095             return options.stripInternal === true && isCompilerOptionEnabled(options, 'declaration');
1096         case 'declaration':
1097             return options.declaration || isCompilerOptionEnabled(options, 'composite');
1098         case 'noImplicitAny':
1099         case 'noImplicitThis':
1100         case 'strictNullChecks':
1101         case 'strictFunctionTypes':
1102         case 'strictPropertyInitialization':
1103         case 'alwaysStrict':
1104             return isStrictCompilerOptionEnabled(options, option);
1105     }
1106     return options[option] === true;
1107 }
1108 exports.isCompilerOptionEnabled = isCompilerOptionEnabled;
1109 //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQWlDO0FBRWpDLDBDQUcyQjtBQUczQix5REFBK0I7QUFFL0IsU0FBZ0IsY0FBYyxDQUEwQixJQUFhLEVBQUUsSUFBTyxFQUFFLFVBQTBCO0lBQ3RHLEtBQW9CLFVBQTRCLEVBQTVCLEtBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBNUIsY0FBNEIsRUFBNUIsSUFBNEI7UUFBM0MsSUFBTSxLQUFLLFNBQUE7UUFDWixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSTtZQUNuQixPQUFvQixLQUFLLENBQUM7S0FBQTtBQUN0QyxDQUFDO0FBSkQsd0NBSUM7QUFFRCxTQUFnQixXQUFXLENBQUMsSUFBbUI7SUFDM0MsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO0FBQy9FLENBQUM7QUFGRCxrQ0FFQztBQUVELFNBQWdCLFVBQVUsQ0FBQyxJQUFtQjtJQUMxQyxPQUFPLElBQUksSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztBQUMzQyxDQUFDO0FBRkQsZ0NBRUM7QUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxJQUFtQjtJQUNoRCxPQUFPLElBQUksSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLGVBQWUsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUM7QUFDekYsQ0FBQztBQUZELDRDQUVDO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLElBQW1CO0lBQzlDLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztBQUNyRixDQUFDO0FBRkQsd0NBRUM7QUFFRCxTQUFn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