UI for Zipcoin Blue

usage.js 62KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var tslib_1 = require("tslib");
  4. var util_1 = require("./util");
  5. var ts = require("typescript");
  6. var DeclarationDomain;
  7. (function (DeclarationDomain) {
  8. DeclarationDomain[DeclarationDomain["Namespace"] = 1] = "Namespace";
  9. DeclarationDomain[DeclarationDomain["Type"] = 2] = "Type";
  10. DeclarationDomain[DeclarationDomain["Value"] = 4] = "Value";
  11. DeclarationDomain[DeclarationDomain["Import"] = 8] = "Import";
  12. DeclarationDomain[DeclarationDomain["Any"] = 7] = "Any";
  13. })(DeclarationDomain = exports.DeclarationDomain || (exports.DeclarationDomain = {}));
  14. var UsageDomain;
  15. (function (UsageDomain) {
  16. UsageDomain[UsageDomain["Namespace"] = 1] = "Namespace";
  17. UsageDomain[UsageDomain["Type"] = 2] = "Type";
  18. UsageDomain[UsageDomain["Value"] = 4] = "Value";
  19. UsageDomain[UsageDomain["ValueOrNamespace"] = 5] = "ValueOrNamespace";
  20. UsageDomain[UsageDomain["Any"] = 7] = "Any";
  21. UsageDomain[UsageDomain["TypeQuery"] = 8] = "TypeQuery";
  22. })(UsageDomain = exports.UsageDomain || (exports.UsageDomain = {}));
  23. function getUsageDomain(node) {
  24. var parent = node.parent;
  25. switch (parent.kind) {
  26. case ts.SyntaxKind.TypeReference:
  27. return 2;
  28. case ts.SyntaxKind.ExpressionWithTypeArguments:
  29. return parent.parent.token === ts.SyntaxKind.ImplementsKeyword ||
  30. parent.parent.parent.kind === ts.SyntaxKind.InterfaceDeclaration
  31. ? 2
  32. : 4;
  33. case ts.SyntaxKind.TypeQuery:
  34. return 5 | 8;
  35. case ts.SyntaxKind.QualifiedName:
  36. if (parent.left === node) {
  37. if (getEntityNameParent(parent).kind === ts.SyntaxKind.TypeQuery)
  38. return 1 | 8;
  39. return 1;
  40. }
  41. break;
  42. case ts.SyntaxKind.ExportSpecifier:
  43. if (parent.propertyName === undefined ||
  44. parent.propertyName === node)
  45. return 7;
  46. break;
  47. case ts.SyntaxKind.ExportAssignment:
  48. return 7;
  49. case ts.SyntaxKind.BindingElement:
  50. if (parent.initializer === node)
  51. return 5;
  52. break;
  53. case ts.SyntaxKind.Parameter:
  54. case ts.SyntaxKind.EnumMember:
  55. case ts.SyntaxKind.PropertyDeclaration:
  56. case ts.SyntaxKind.VariableDeclaration:
  57. case ts.SyntaxKind.PropertyAssignment:
  58. case ts.SyntaxKind.PropertyAccessExpression:
  59. case ts.SyntaxKind.ImportEqualsDeclaration:
  60. if (parent.name !== node)
  61. return 5;
  62. break;
  63. case ts.SyntaxKind.JsxAttribute:
  64. case ts.SyntaxKind.FunctionDeclaration:
  65. case ts.SyntaxKind.FunctionExpression:
  66. case ts.SyntaxKind.NamespaceImport:
  67. case ts.SyntaxKind.ClassDeclaration:
  68. case ts.SyntaxKind.ClassExpression:
  69. case ts.SyntaxKind.ModuleDeclaration:
  70. case ts.SyntaxKind.MethodDeclaration:
  71. case ts.SyntaxKind.EnumDeclaration:
  72. case ts.SyntaxKind.GetAccessor:
  73. case ts.SyntaxKind.SetAccessor:
  74. case ts.SyntaxKind.LabeledStatement:
  75. case ts.SyntaxKind.BreakStatement:
  76. case ts.SyntaxKind.ContinueStatement:
  77. case ts.SyntaxKind.ImportClause:
  78. case ts.SyntaxKind.ImportSpecifier:
  79. case ts.SyntaxKind.TypePredicate:
  80. case ts.SyntaxKind.MethodSignature:
  81. case ts.SyntaxKind.PropertySignature:
  82. case ts.SyntaxKind.NamespaceExportDeclaration:
  83. case ts.SyntaxKind.InterfaceDeclaration:
  84. case ts.SyntaxKind.TypeAliasDeclaration:
  85. case ts.SyntaxKind.TypeParameter:
  86. break;
  87. default:
  88. return 5;
  89. }
  90. }
  91. exports.getUsageDomain = getUsageDomain;
  92. function getDeclarationDomain(node) {
  93. switch (node.parent.kind) {
  94. case ts.SyntaxKind.TypeParameter:
  95. case ts.SyntaxKind.InterfaceDeclaration:
  96. case ts.SyntaxKind.TypeAliasDeclaration:
  97. return 2;
  98. case ts.SyntaxKind.ClassDeclaration:
  99. case ts.SyntaxKind.ClassExpression:
  100. return 2 | 4;
  101. case ts.SyntaxKind.EnumDeclaration:
  102. return 7;
  103. case ts.SyntaxKind.NamespaceImport:
  104. case ts.SyntaxKind.ImportClause:
  105. return 7 | 8;
  106. case ts.SyntaxKind.ImportEqualsDeclaration:
  107. case ts.SyntaxKind.ImportSpecifier:
  108. return node.parent.name === node
  109. ? 7 | 8
  110. : undefined;
  111. case ts.SyntaxKind.ModuleDeclaration:
  112. return 1;
  113. case ts.SyntaxKind.Parameter:
  114. if (node.parent.parent.kind === ts.SyntaxKind.IndexSignature)
  115. return;
  116. case ts.SyntaxKind.BindingElement:
  117. case ts.SyntaxKind.VariableDeclaration:
  118. return node.parent.name === node ? 4 : undefined;
  119. case ts.SyntaxKind.FunctionDeclaration:
  120. case ts.SyntaxKind.FunctionExpression:
  121. return 4;
  122. }
  123. }
  124. exports.getDeclarationDomain = getDeclarationDomain;
  125. function collectVariableUsage(sourceFile) {
  126. return new UsageWalker().getUsage(sourceFile);
  127. }
  128. exports.collectVariableUsage = collectVariableUsage;
  129. var AbstractScope = (function () {
  130. function AbstractScope(_global) {
  131. this._global = _global;
  132. this._variables = new Map();
  133. this._uses = [];
  134. this._namespaceScopes = undefined;
  135. this._enumScopes = undefined;
  136. }
  137. AbstractScope.prototype.addVariable = function (identifier, name, blockScoped, exported, domain) {
  138. var variables = this._getDestinationScope(blockScoped).getVariables();
  139. var declaration = {
  140. domain: domain,
  141. exported: exported,
  142. declaration: name,
  143. };
  144. var variable = variables.get(identifier);
  145. if (variable === undefined) {
  146. variables.set(identifier, {
  147. domain: domain,
  148. declarations: [declaration],
  149. uses: [],
  150. });
  151. }
  152. else {
  153. variable.domain |= domain;
  154. variable.declarations.push(declaration);
  155. }
  156. };
  157. AbstractScope.prototype.addUse = function (use) {
  158. this._uses.push(use);
  159. };
  160. AbstractScope.prototype.getVariables = function () {
  161. return this._variables;
  162. };
  163. AbstractScope.prototype.getFunctionScope = function () {
  164. return this;
  165. };
  166. AbstractScope.prototype.end = function (cb) {
  167. var _this = this;
  168. if (this._namespaceScopes !== undefined)
  169. this._namespaceScopes.forEach(function (value) { return value.finish(cb); });
  170. this._namespaceScopes = this._enumScopes = undefined;
  171. this._applyUses();
  172. this._variables.forEach(function (variable) {
  173. for (var _i = 0, _a = variable.declarations; _i < _a.length; _i++) {
  174. var declaration = _a[_i];
  175. var result = {
  176. declarations: [],
  177. domain: declaration.domain,
  178. exported: declaration.exported,
  179. inGlobalScope: _this._global,
  180. uses: [],
  181. };
  182. for (var _b = 0, _c = variable.declarations; _b < _c.length; _b++) {
  183. var other = _c[_b];
  184. if (other.domain & declaration.domain)
  185. result.declarations.push(other.declaration);
  186. }
  187. for (var _d = 0, _e = variable.uses; _d < _e.length; _d++) {
  188. var use = _e[_d];
  189. if (use.domain & declaration.domain)
  190. result.uses.push(use);
  191. }
  192. cb(result, declaration.declaration, _this);
  193. }
  194. });
  195. };
  196. AbstractScope.prototype.markExported = function (_name) { };
  197. AbstractScope.prototype.createOrReuseNamespaceScope = function (name, _exported, ambient, hasExportStatement) {
  198. var scope;
  199. if (this._namespaceScopes === undefined) {
  200. this._namespaceScopes = new Map();
  201. }
  202. else {
  203. scope = this._namespaceScopes.get(name);
  204. }
  205. if (scope === undefined) {
  206. scope = new NamespaceScope(ambient, hasExportStatement, this);
  207. this._namespaceScopes.set(name, scope);
  208. }
  209. else {
  210. scope.refresh(ambient, hasExportStatement);
  211. }
  212. return scope;
  213. };
  214. AbstractScope.prototype.createOrReuseEnumScope = function (name, _exported) {
  215. var scope;
  216. if (this._enumScopes === undefined) {
  217. this._enumScopes = new Map();
  218. }
  219. else {
  220. scope = this._enumScopes.get(name);
  221. }
  222. if (scope === undefined) {
  223. scope = new EnumScope(this);
  224. this._enumScopes.set(name, scope);
  225. }
  226. return scope;
  227. };
  228. AbstractScope.prototype._applyUses = function () {
  229. for (var _i = 0, _a = this._uses; _i < _a.length; _i++) {
  230. var use = _a[_i];
  231. if (!this._applyUse(use))
  232. this._addUseToParent(use);
  233. }
  234. this._uses = [];
  235. };
  236. AbstractScope.prototype._applyUse = function (use, variables) {
  237. if (variables === void 0) { variables = this._variables; }
  238. var variable = variables.get(util_1.getIdentifierText(use.location));
  239. if (variable === undefined || (variable.domain & use.domain) === 0)
  240. return false;
  241. variable.uses.push(use);
  242. return true;
  243. };
  244. AbstractScope.prototype._getDestinationScope = function (_blockScoped) {
  245. return this;
  246. };
  247. AbstractScope.prototype._addUseToParent = function (_use) { };
  248. return AbstractScope;
  249. }());
  250. var RootScope = (function (_super) {
  251. tslib_1.__extends(RootScope, _super);
  252. function RootScope(_exportAll, global) {
  253. var _this = _super.call(this, global) || this;
  254. _this._exportAll = _exportAll;
  255. _this._exports = undefined;
  256. _this._innerScope = new NonRootScope(_this);
  257. return _this;
  258. }
  259. RootScope.prototype.addVariable = function (identifier, name, blockScoped, exported, domain) {
  260. if (domain & 8)
  261. return _super.prototype.addVariable.call(this, identifier, name, blockScoped, exported, domain);
  262. return this._innerScope.addVariable(identifier, name, blockScoped, exported, domain);
  263. };
  264. RootScope.prototype.addUse = function (use, origin) {
  265. if (origin === this._innerScope)
  266. return _super.prototype.addUse.call(this, use);
  267. return this._innerScope.addUse(use);
  268. };
  269. RootScope.prototype.markExported = function (id) {
  270. var text = util_1.getIdentifierText(id);
  271. if (this._exports === undefined) {
  272. this._exports = [text];
  273. }
  274. else {
  275. this._exports.push(text);
  276. }
  277. };
  278. RootScope.prototype.end = function (cb) {
  279. var _this = this;
  280. this._innerScope.end(function (value, key) {
  281. value.exported = value.exported || _this._exportAll
  282. || _this._exports !== undefined && _this._exports.indexOf(util_1.getIdentifierText(key)) !== -1;
  283. value.inGlobalScope = _this._global;
  284. return cb(value, key, _this);
  285. });
  286. return _super.prototype.end.call(this, function (value, key, scope) {
  287. value.exported = value.exported || scope === _this
  288. && _this._exports !== undefined && _this._exports.indexOf(util_1.getIdentifierText(key)) !== -1;
  289. return cb(value, key, scope);
  290. });
  291. };
  292. return RootScope;
  293. }(AbstractScope));
  294. var NonRootScope = (function (_super) {
  295. tslib_1.__extends(NonRootScope, _super);
  296. function NonRootScope(_parent) {
  297. var _this = _super.call(this, false) || this;
  298. _this._parent = _parent;
  299. return _this;
  300. }
  301. NonRootScope.prototype._addUseToParent = function (use) {
  302. return this._parent.addUse(use, this);
  303. };
  304. return NonRootScope;
  305. }(AbstractScope));
  306. var EnumScope = (function (_super) {
  307. tslib_1.__extends(EnumScope, _super);
  308. function EnumScope() {
  309. return _super !== null && _super.apply(this, arguments) || this;
  310. }
  311. EnumScope.prototype.end = function () {
  312. this._applyUses();
  313. };
  314. return EnumScope;
  315. }(NonRootScope));
  316. var ConditionalTypeScopeState;
  317. (function (ConditionalTypeScopeState) {
  318. ConditionalTypeScopeState[ConditionalTypeScopeState["Initial"] = 0] = "Initial";
  319. ConditionalTypeScopeState[ConditionalTypeScopeState["Extends"] = 1] = "Extends";
  320. ConditionalTypeScopeState[ConditionalTypeScopeState["TrueType"] = 2] = "TrueType";
  321. ConditionalTypeScopeState[ConditionalTypeScopeState["FalseType"] = 3] = "FalseType";
  322. })(ConditionalTypeScopeState || (ConditionalTypeScopeState = {}));
  323. var ConditionalTypeScope = (function (_super) {
  324. tslib_1.__extends(ConditionalTypeScope, _super);
  325. function ConditionalTypeScope() {
  326. var _this = _super !== null && _super.apply(this, arguments) || this;
  327. _this._state = 0;
  328. return _this;
  329. }
  330. ConditionalTypeScope.prototype.updateState = function (newState) {
  331. this._state = newState;
  332. };
  333. ConditionalTypeScope.prototype.addUse = function (use) {
  334. if (this._state === 2)
  335. return void this._uses.push(use);
  336. return this._parent.addUse(use, this);
  337. };
  338. return ConditionalTypeScope;
  339. }(NonRootScope));
  340. var FunctionScope = (function (_super) {
  341. tslib_1.__extends(FunctionScope, _super);
  342. function FunctionScope() {
  343. return _super !== null && _super.apply(this, arguments) || this;
  344. }
  345. FunctionScope.prototype.beginBody = function () {
  346. this._applyUses();
  347. };
  348. return FunctionScope;
  349. }(NonRootScope));
  350. var AbstractNamedExpressionScope = (function (_super) {
  351. tslib_1.__extends(AbstractNamedExpressionScope, _super);
  352. function AbstractNamedExpressionScope(_name, _domain, parent) {
  353. var _this = _super.call(this, parent) || this;
  354. _this._name = _name;
  355. _this._domain = _domain;
  356. return _this;
  357. }
  358. AbstractNamedExpressionScope.prototype.end = function (cb) {
  359. this._innerScope.end(cb);
  360. return cb({
  361. declarations: [this._name],
  362. domain: this._domain,
  363. exported: false,
  364. uses: this._uses,
  365. inGlobalScope: false,
  366. }, this._name, this);
  367. };
  368. AbstractNamedExpressionScope.prototype.addUse = function (use, source) {
  369. if (source !== this._innerScope)
  370. return this._innerScope.addUse(use);
  371. if (use.domain & this._domain && util_1.getIdentifierText(use.location) === util_1.getIdentifierText(this._name)) {
  372. this._uses.push(use);
  373. }
  374. else {
  375. return this._parent.addUse(use, this);
  376. }
  377. };
  378. AbstractNamedExpressionScope.prototype.getFunctionScope = function () {
  379. return this._innerScope;
  380. };
  381. AbstractNamedExpressionScope.prototype._getDestinationScope = function () {
  382. return this._innerScope;
  383. };
  384. return AbstractNamedExpressionScope;
  385. }(NonRootScope));
  386. var FunctionExpressionScope = (function (_super) {
  387. tslib_1.__extends(FunctionExpressionScope, _super);
  388. function FunctionExpressionScope(name, parent) {
  389. var _this = _super.call(this, name, 4, parent) || this;
  390. _this._innerScope = new FunctionScope(_this);
  391. return _this;
  392. }
  393. FunctionExpressionScope.prototype.beginBody = function () {
  394. return this._innerScope.beginBody();
  395. };
  396. return FunctionExpressionScope;
  397. }(AbstractNamedExpressionScope));
  398. var ClassExpressionScope = (function (_super) {
  399. tslib_1.__extends(ClassExpressionScope, _super);
  400. function ClassExpressionScope(name, parent) {
  401. var _this = _super.call(this, name, 4 | 2, parent) || this;
  402. _this._innerScope = new NonRootScope(_this);
  403. return _this;
  404. }
  405. return ClassExpressionScope;
  406. }(AbstractNamedExpressionScope));
  407. var BlockScope = (function (_super) {
  408. tslib_1.__extends(BlockScope, _super);
  409. function BlockScope(_functionScope, parent) {
  410. var _this = _super.call(this, parent) || this;
  411. _this._functionScope = _functionScope;
  412. return _this;
  413. }
  414. BlockScope.prototype.getFunctionScope = function () {
  415. return this._functionScope;
  416. };
  417. BlockScope.prototype._getDestinationScope = function (blockScoped) {
  418. return blockScoped ? this : this._functionScope;
  419. };
  420. return BlockScope;
  421. }(NonRootScope));
  422. function mapDeclaration(declaration) {
  423. return {
  424. declaration: declaration,
  425. exported: true,
  426. domain: getDeclarationDomain(declaration),
  427. };
  428. }
  429. var NamespaceScope = (function (_super) {
  430. tslib_1.__extends(NamespaceScope, _super);
  431. function NamespaceScope(_ambient, _hasExport, parent) {
  432. var _this = _super.call(this, parent) || this;
  433. _this._ambient = _ambient;
  434. _this._hasExport = _hasExport;
  435. _this._innerScope = new NonRootScope(_this);
  436. _this._exports = undefined;
  437. return _this;
  438. }
  439. NamespaceScope.prototype.finish = function (cb) {
  440. return _super.prototype.end.call(this, cb);
  441. };
  442. NamespaceScope.prototype.end = function (cb) {
  443. var _this = this;
  444. this._innerScope.end(function (variable, key, scope) {
  445. if (scope !== _this._innerScope ||
  446. !variable.exported && (!_this._ambient || _this._exports !== undefined && !_this._exports.has(util_1.getIdentifierText(key))))
  447. return cb(variable, key, scope);
  448. var namespaceVar = _this._variables.get(util_1.getIdentifierText(key));
  449. if (namespaceVar === undefined) {
  450. _this._variables.set(util_1.getIdentifierText(key), {
  451. declarations: variable.declarations.map(mapDeclaration),
  452. domain: variable.domain,
  453. uses: variable.uses.slice(),
  454. });
  455. }
  456. else {
  457. outer: for (var _i = 0, _a = variable.declarations; _i < _a.length; _i++) {
  458. var declaration = _a[_i];
  459. for (var _b = 0, _c = namespaceVar.declarations; _b < _c.length; _b++) {
  460. var existing = _c[_b];
  461. if (existing.declaration === declaration)
  462. continue outer;
  463. }
  464. namespaceVar.declarations.push(mapDeclaration(declaration));
  465. }
  466. namespaceVar.domain |= variable.domain;
  467. for (var _d = 0, _e = variable.uses; _d < _e.length; _d++) {
  468. var use = _e[_d];
  469. if (namespaceVar.uses.indexOf(use) !== -1)
  470. continue;
  471. namespaceVar.uses.push(use);
  472. }
  473. }
  474. });
  475. this._applyUses();
  476. this._innerScope = new NonRootScope(this);
  477. };
  478. NamespaceScope.prototype.createOrReuseNamespaceScope = function (name, exported, ambient, hasExportStatement) {
  479. if (!exported && (!this._ambient || this._hasExport))
  480. return this._innerScope.createOrReuseNamespaceScope(name, exported, ambient || this._ambient, hasExportStatement);
  481. return _super.prototype.createOrReuseNamespaceScope.call(this, name, exported, ambient || this._ambient, hasExportStatement);
  482. };
  483. NamespaceScope.prototype.createOrReuseEnumScope = function (name, exported) {
  484. if (!exported && (!this._ambient || this._hasExport))
  485. return this._innerScope.createOrReuseEnumScope(name, exported);
  486. return _super.prototype.createOrReuseEnumScope.call(this, name, exported);
  487. };
  488. NamespaceScope.prototype.addUse = function (use, source) {
  489. if (source !== this._innerScope)
  490. return this._innerScope.addUse(use);
  491. this._uses.push(use);
  492. };
  493. NamespaceScope.prototype.refresh = function (ambient, hasExport) {
  494. this._ambient = ambient;
  495. this._hasExport = hasExport;
  496. };
  497. NamespaceScope.prototype.markExported = function (name, _as) {
  498. if (this._exports === undefined)
  499. this._exports = new Set();
  500. this._exports.add(util_1.getIdentifierText(name));
  501. };
  502. NamespaceScope.prototype._getDestinationScope = function () {
  503. return this._innerScope;
  504. };
  505. return NamespaceScope;
  506. }(NonRootScope));
  507. function getEntityNameParent(name) {
  508. var parent = name.parent;
  509. while (parent.kind === ts.SyntaxKind.QualifiedName)
  510. parent = parent.parent;
  511. return parent;
  512. }
  513. var UsageWalker = (function () {
  514. function UsageWalker() {
  515. this._result = new Map();
  516. }
  517. UsageWalker.prototype.getUsage = function (sourceFile) {
  518. var _this = this;
  519. var variableCallback = function (variable, key) {
  520. _this._result.set(key, variable);
  521. };
  522. var isModule = ts.isExternalModule(sourceFile);
  523. this._scope = new RootScope(sourceFile.isDeclarationFile && isModule && !containsExportStatement(sourceFile), !isModule);
  524. var cb = function (node) {
  525. if (util_1.isBlockScopeBoundary(node))
  526. return continueWithScope(node, new BlockScope(_this._scope.getFunctionScope(), _this._scope), handleBlockScope);
  527. switch (node.kind) {
  528. case ts.SyntaxKind.ClassExpression:
  529. return continueWithScope(node, node.name !== undefined
  530. ? new ClassExpressionScope(node.name, _this._scope)
  531. : new NonRootScope(_this._scope));
  532. case ts.SyntaxKind.ClassDeclaration:
  533. _this._handleDeclaration(node, true, 4 | 2);
  534. return continueWithScope(node, new NonRootScope(_this._scope));
  535. case ts.SyntaxKind.InterfaceDeclaration:
  536. case ts.SyntaxKind.TypeAliasDeclaration:
  537. _this._handleDeclaration(node, true, 2);
  538. return continueWithScope(node, new NonRootScope(_this._scope));
  539. case ts.SyntaxKind.EnumDeclaration:
  540. _this._handleDeclaration(node, true, 7);
  541. return continueWithScope(node, _this._scope.createOrReuseEnumScope(util_1.getIdentifierText(node.name), util_1.hasModifier(node.modifiers, ts.SyntaxKind.ExportKeyword)));
  542. case ts.SyntaxKind.ModuleDeclaration:
  543. return _this._handleModule(node, continueWithScope);
  544. case ts.SyntaxKind.MappedType:
  545. return continueWithScope(node, new NonRootScope(_this._scope));
  546. case ts.SyntaxKind.FunctionExpression:
  547. case ts.SyntaxKind.ArrowFunction:
  548. case ts.SyntaxKind.Constructor:
  549. case ts.SyntaxKind.MethodDeclaration:
  550. case ts.SyntaxKind.FunctionDeclaration:
  551. case ts.SyntaxKind.GetAccessor:
  552. case ts.SyntaxKind.SetAccessor:
  553. case ts.SyntaxKind.MethodSignature:
  554. case ts.SyntaxKind.CallSignature:
  555. case ts.SyntaxKind.ConstructSignature:
  556. case ts.SyntaxKind.ConstructorType:
  557. case ts.SyntaxKind.FunctionType:
  558. return _this._handleFunctionLikeDeclaration(node, cb, variableCallback);
  559. case ts.SyntaxKind.ConditionalType:
  560. return _this._handleConditionalType(node, cb, variableCallback);
  561. case ts.SyntaxKind.VariableDeclarationList:
  562. _this._handleVariableDeclaration(node);
  563. break;
  564. case ts.SyntaxKind.Parameter:
  565. if (node.parent.kind !== ts.SyntaxKind.IndexSignature &&
  566. (node.name.kind !== ts.SyntaxKind.Identifier ||
  567. node.name.originalKeywordKind !== ts.SyntaxKind.ThisKeyword))
  568. _this._handleBindingName(node.name, false, false);
  569. break;
  570. case ts.SyntaxKind.EnumMember:
  571. _this._scope.addVariable(util_1.getPropertyName(node.name), node.name, false, true, 4);
  572. break;
  573. case ts.SyntaxKind.ImportClause:
  574. case ts.SyntaxKind.ImportSpecifier:
  575. case ts.SyntaxKind.NamespaceImport:
  576. case ts.SyntaxKind.ImportEqualsDeclaration:
  577. _this._handleDeclaration(node, false, 7 | 8);
  578. break;
  579. case ts.SyntaxKind.TypeParameter:
  580. _this._scope.addVariable(util_1.getIdentifierText(node.name), node.name, true, false, 2);
  581. break;
  582. case ts.SyntaxKind.ExportSpecifier:
  583. if (node.propertyName !== undefined)
  584. return _this._scope.markExported(node.propertyName, node.name);
  585. return _this._scope.markExported(node.name);
  586. case ts.SyntaxKind.ExportAssignment:
  587. if (node.expression.kind === ts.SyntaxKind.Identifier)
  588. return _this._scope.markExported(node.expression);
  589. break;
  590. case ts.SyntaxKind.Identifier:
  591. var domain = getUsageDomain(node);
  592. if (domain !== undefined)
  593. _this._scope.addUse({ domain: domain, location: node });
  594. return;
  595. }
  596. return ts.forEachChild(node, cb);
  597. };
  598. var continueWithScope = function (node, scope, next) {
  599. if (next === void 0) { next = forEachChild; }
  600. var savedScope = _this._scope;
  601. _this._scope = scope;
  602. next(node);
  603. _this._scope.end(variableCallback);
  604. _this._scope = savedScope;
  605. };
  606. var handleBlockScope = function (node) {
  607. if (node.kind === ts.SyntaxKind.CatchClause && node.variableDeclaration !== undefined)
  608. _this._handleBindingName(node.variableDeclaration.name, true, false);
  609. return ts.forEachChild(node, cb);
  610. };
  611. ts.forEachChild(sourceFile, cb);
  612. this._scope.end(variableCallback);
  613. return this._result;
  614. function forEachChild(node) {
  615. return ts.forEachChild(node, cb);
  616. }
  617. };
  618. UsageWalker.prototype._handleConditionalType = function (node, cb, varCb) {
  619. var savedScope = this._scope;
  620. var scope = this._scope = new ConditionalTypeScope(savedScope);
  621. cb(node.checkType);
  622. scope.updateState(1);
  623. cb(node.extendsType);
  624. scope.updateState(2);
  625. cb(node.trueType);
  626. scope.updateState(3);
  627. cb(node.falseType);
  628. scope.end(varCb);
  629. this._scope = savedScope;
  630. };
  631. UsageWalker.prototype._handleFunctionLikeDeclaration = function (node, cb, varCb) {
  632. if (node.decorators !== undefined)
  633. node.decorators.forEach(cb);
  634. var savedScope = this._scope;
  635. if (node.kind === ts.SyntaxKind.FunctionDeclaration)
  636. this._handleDeclaration(node, false, 4);
  637. var scope = this._scope = node.kind === ts.SyntaxKind.FunctionExpression && node.name !== undefined
  638. ? new FunctionExpressionScope(node.name, savedScope)
  639. : new FunctionScope(savedScope);
  640. if (node.name !== undefined)
  641. cb(node.name);
  642. if (node.typeParameters !== undefined)
  643. node.typeParameters.forEach(cb);
  644. node.parameters.forEach(cb);
  645. if (node.type !== undefined)
  646. cb(node.type);
  647. if (node.body !== undefined) {
  648. scope.beginBody();
  649. cb(node.body);
  650. }
  651. scope.end(varCb);
  652. this._scope = savedScope;
  653. };
  654. UsageWalker.prototype._handleModule = function (node, next) {
  655. if (node.flags & ts.NodeFlags.GlobalAugmentation)
  656. return next(node, this._scope.createOrReuseNamespaceScope('-global', false, true, false));
  657. if (node.name.kind === ts.SyntaxKind.Identifier) {
  658. var exported = isNamespaceExported(node);
  659. this._scope.addVariable(util_1.getIdentifierText(node.name), node.name, false, exported, 1 | 4);
  660. var ambient = util_1.hasModifier(node.modifiers, ts.SyntaxKind.DeclareKeyword);
  661. return next(node, this._scope.createOrReuseNamespaceScope(util_1.getIdentifierText(node.name), exported, ambient, ambient && namespaceHasExportStatement(node)));
  662. }
  663. return next(node, this._scope.createOrReuseNamespaceScope("\"" + node.name.text + "\"", false, true, namespaceHasExportStatement(node)));
  664. };
  665. UsageWalker.prototype._handleDeclaration = function (node, blockScoped, domain) {
  666. if (node.name !== undefined)
  667. this._scope.addVariable(util_1.getIdentifierText(node.name), node.name, blockScoped, util_1.hasModifier(node.modifiers, ts.SyntaxKind.ExportKeyword), domain);
  668. };
  669. UsageWalker.prototype._handleBindingName = function (name, blockScoped, exported) {
  670. var _this = this;
  671. if (name.kind === ts.SyntaxKind.Identifier)
  672. return this._scope.addVariable(util_1.getIdentifierText(name), name, blockScoped, exported, 4);
  673. util_1.forEachDestructuringIdentifier(name, function (declaration) {
  674. _this._scope.addVariable(util_1.getIdentifierText(declaration.name), declaration.name, blockScoped, exported, 4);
  675. });
  676. };
  677. UsageWalker.prototype._handleVariableDeclaration = function (declarationList) {
  678. var blockScoped = util_1.isBlockScopedVariableDeclarationList(declarationList);
  679. var exported = declarationList.parent.kind === ts.SyntaxKind.VariableStatement &&
  680. util_1.hasModifier(declarationList.parent.modifiers, ts.SyntaxKind.ExportKeyword);
  681. for (var _i = 0, _a = declarationList.declarations; _i < _a.length; _i++) {
  682. var declaration = _a[_i];
  683. this._handleBindingName(declaration.name, blockScoped, exported);
  684. }
  685. };
  686. return UsageWalker;
  687. }());
  688. function isNamespaceExported(node) {
  689. return node.parent.kind === ts.SyntaxKind.ModuleDeclaration || util_1.hasModifier(node.modifiers, ts.SyntaxKind.ExportKeyword);
  690. }
  691. function namespaceHasExportStatement(ns) {
  692. if (ns.body === undefined || ns.body.kind !== ts.SyntaxKind.ModuleBlock)
  693. return false;
  694. return containsExportStatement(ns.body);
  695. }
  696. function containsExportStatement(block) {
  697. for (var _i = 0, _a = block.statements; _i < _a.length; _i++) {
  698. var statement = _a[_i];
  699. if (statement.kind === ts.SyntaxKind.ExportDeclaration || statement.kind === ts.SyntaxKind.ExportAssignment)
  700. return true;
  701. }
  702. return false;
  703. }
  704. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1c2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFPZ0I7QUFDaEIsK0JBQWlDO0FBMkJqQyxJQUFrQixpQkFNakI7QUFORCxXQUFrQixpQkFBaUI7SUFDL0IsbUVBQWEsQ0FBQTtJQUNiLHlEQUFRLENBQUE7SUFDUiwyREFBUyxDQUFBO0lBQ1QsNkRBQVUsQ0FBQTtJQUNWLHVEQUE4QixDQUFBO0FBQ2xDLENBQUMsRUFOaUIsaUJBQWlCLEdBQWpCLHlCQUFpQixLQUFqQix5QkFBaUIsUUFNbEM7QUFFRCxJQUFrQixXQU9qQjtBQVBELFdBQWtCLFdBQVc7SUFDekIsdURBQWEsQ0FBQTtJQUNiLDZDQUFRLENBQUE7SUFDUiwrQ0FBUyxDQUFBO0lBQ1QscUVBQW9DLENBQUE7SUFDcEMsMkNBQThCLENBQUE7SUFDOUIsdURBQWEsQ0FBQTtBQUNqQixDQUFDLEVBUGlCLFdBQVcsR0FBWCxtQkFBVyxLQUFYLG1CQUFXLFFBTzVCO0FBRUQsd0JBQStCLElBQW1CO0lBQzlDLElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFPLENBQUM7SUFDNUIsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFO1FBQ2pCLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhO1lBQzVCLFNBQXdCO1FBQzVCLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQywyQkFBMkI7WUFDMUMsT0FBMkIsTUFBTSxDQUFDLE1BQU8sQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUI7Z0JBQy9FLE1BQU0sQ0FBQyxNQUFPLENBQUMsTUFBTyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLG9CQUFvQjtnQkFDbEUsQ0FBQztnQkFDRCxDQUFDLEVBQWtCLENBQUM7UUFDNUIsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVM7WUFDeEIsT0FBTyxLQUFvRCxDQUFDO1FBQ2hFLEtB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