index.cjs 96 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301
  1. 'use strict';
  2. var ts9 = require('typescript');
  3. function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
  4. var ts9__default = /*#__PURE__*/_interopDefault(ts9);
  5. // src/comments.ts
  6. function forEachToken(node, callback, sourceFile = node.getSourceFile()) {
  7. for (const token of iterateTokens(node, sourceFile)) {
  8. callback(token);
  9. }
  10. }
  11. function* iterateTokens(node, sourceFile = node.getSourceFile()) {
  12. const queue = [];
  13. while (true) {
  14. if (ts9__default.default.isTokenKind(node.kind)) {
  15. yield node;
  16. } else {
  17. const children = node.getChildren(sourceFile);
  18. if (children.length === 1) {
  19. node = children[0];
  20. continue;
  21. }
  22. for (let i = children.length - 1; i >= 0; --i) {
  23. queue.push(children[i]);
  24. }
  25. }
  26. if (queue.length === 0) {
  27. break;
  28. }
  29. node = queue.pop();
  30. }
  31. }
  32. // src/comments.ts
  33. function forEachComment(node, callback, sourceFile = node.getSourceFile()) {
  34. const fullText = sourceFile.text;
  35. for (const { end, kind, pos } of iterateComments(node, sourceFile)) {
  36. callback(fullText, { end, kind, pos });
  37. }
  38. }
  39. function* iterateComments(node, sourceFile = node.getSourceFile()) {
  40. const fullText = sourceFile.text;
  41. const notJsx = sourceFile.languageVariant !== ts9__default.default.LanguageVariant.JSX;
  42. for (const token of iterateTokens(node, sourceFile)) {
  43. if (token.pos === token.end) {
  44. continue;
  45. }
  46. if (token.kind !== ts9__default.default.SyntaxKind.JsxText) {
  47. yield* collectComments((callback) => {
  48. ts9__default.default.forEachLeadingCommentRange(
  49. fullText,
  50. // skip shebang at position 0
  51. token.pos === 0 ? (ts9__default.default.getShebang(fullText) ?? "").length : token.pos,
  52. callback
  53. );
  54. }, fullText);
  55. }
  56. if (notJsx || canHaveTrailingTrivia(token)) {
  57. yield* collectComments((callback) => {
  58. ts9__default.default.forEachTrailingCommentRange(fullText, token.end, callback);
  59. }, fullText);
  60. }
  61. }
  62. }
  63. function canHaveTrailingTrivia(token) {
  64. switch (token.kind) {
  65. case ts9__default.default.SyntaxKind.CloseBraceToken:
  66. return token.parent.kind !== ts9__default.default.SyntaxKind.JsxExpression || !isJsxElementOrFragment(token.parent.parent);
  67. case ts9__default.default.SyntaxKind.GreaterThanToken:
  68. switch (token.parent.kind) {
  69. case ts9__default.default.SyntaxKind.JsxClosingElement:
  70. case ts9__default.default.SyntaxKind.JsxClosingFragment:
  71. return !isJsxElementOrFragment(token.parent.parent.parent);
  72. case ts9__default.default.SyntaxKind.JsxOpeningElement:
  73. return token.end !== token.parent.end;
  74. case ts9__default.default.SyntaxKind.JsxOpeningFragment:
  75. return false;
  76. // would be inside the fragment
  77. case ts9__default.default.SyntaxKind.JsxSelfClosingElement:
  78. return token.end !== token.parent.end || // if end is not equal, this is part of the type arguments list
  79. !isJsxElementOrFragment(token.parent.parent);
  80. }
  81. }
  82. return true;
  83. }
  84. function collectComments(execute, fullText) {
  85. const comments = [];
  86. execute((pos, end, kind) => {
  87. const text = fullText.slice(pos, end);
  88. const value = text.slice(
  89. 2,
  90. kind === ts9__default.default.SyntaxKind.SingleLineCommentTrivia ? void 0 : -2
  91. );
  92. comments.push({ end, kind, pos, text, value });
  93. });
  94. return comments;
  95. }
  96. function isJsxElementOrFragment(node) {
  97. return node.kind === ts9__default.default.SyntaxKind.JsxElement || node.kind === ts9__default.default.SyntaxKind.JsxFragment;
  98. }
  99. function isCompilerOptionEnabled(options, option) {
  100. switch (option) {
  101. case "allowJs":
  102. return options.allowJs === void 0 ? isCompilerOptionEnabled(options, "checkJs") : options.allowJs;
  103. case "allowSyntheticDefaultImports":
  104. return options.allowSyntheticDefaultImports !== void 0 ? options.allowSyntheticDefaultImports : isCompilerOptionEnabled(options, "esModuleInterop") || options.module === ts9__default.default.ModuleKind.System;
  105. case "alwaysStrict":
  106. case "noImplicitAny":
  107. case "noImplicitThis":
  108. case "strictBindCallApply":
  109. case "strictFunctionTypes":
  110. case "strictNullChecks":
  111. case "strictPropertyInitialization":
  112. return isStrictCompilerOptionEnabled(
  113. options,
  114. option
  115. );
  116. case "declaration":
  117. return options.declaration || isCompilerOptionEnabled(options, "composite");
  118. case "declarationMap":
  119. case "emitDeclarationOnly":
  120. case "stripInternal":
  121. return options[option] === true && isCompilerOptionEnabled(options, "declaration");
  122. case "incremental":
  123. return options.incremental === void 0 ? isCompilerOptionEnabled(options, "composite") : options.incremental;
  124. case "noUncheckedIndexedAccess":
  125. return options.noUncheckedIndexedAccess === true && isCompilerOptionEnabled(options, "strictNullChecks");
  126. case "skipDefaultLibCheck":
  127. return options.skipDefaultLibCheck || isCompilerOptionEnabled(options, "skipLibCheck");
  128. case "suppressImplicitAnyIndexErrors":
  129. return (
  130. // eslint-disable-next-line @typescript-eslint/no-deprecated
  131. options.suppressImplicitAnyIndexErrors === true && isCompilerOptionEnabled(options, "noImplicitAny")
  132. );
  133. }
  134. return options[option] === true;
  135. }
  136. function isStrictCompilerOptionEnabled(options, option) {
  137. return (options.strict ? options[option] !== false : options[option] === true) && (option !== "strictPropertyInitialization" || isStrictCompilerOptionEnabled(options, "strictNullChecks"));
  138. }
  139. function isModifierFlagSet(node, flag) {
  140. return isFlagSet(ts9__default.default.getCombinedModifierFlags(node), flag);
  141. }
  142. function isFlagSet(allFlags, flag) {
  143. return (allFlags & flag) !== 0;
  144. }
  145. function isFlagSetOnObject(obj, flag) {
  146. return isFlagSet(obj.flags, flag);
  147. }
  148. var isNodeFlagSet = isFlagSetOnObject;
  149. function isObjectFlagSet(objectType, flag) {
  150. return isFlagSet(objectType.objectFlags, flag);
  151. }
  152. var isSymbolFlagSet = isFlagSetOnObject;
  153. function isTransientSymbolLinksFlagSet(links, flag) {
  154. return isFlagSet(links.checkFlags, flag);
  155. }
  156. var isTypeFlagSet = isFlagSetOnObject;
  157. // src/modifiers.ts
  158. function includesModifier(modifiers, ...kinds) {
  159. if (modifiers === void 0) {
  160. return false;
  161. }
  162. for (const modifier of modifiers) {
  163. if (kinds.includes(modifier.kind)) {
  164. return true;
  165. }
  166. }
  167. return false;
  168. }
  169. function isAssignmentKind(kind) {
  170. return kind >= ts9__default.default.SyntaxKind.FirstAssignment && kind <= ts9__default.default.SyntaxKind.LastAssignment;
  171. }
  172. function isNumericPropertyName(name) {
  173. return String(+name) === name;
  174. }
  175. function isValidPropertyAccess(text, languageVersion = ts9__default.default.ScriptTarget.Latest) {
  176. if (text.length === 0) {
  177. return false;
  178. }
  179. let ch = text.codePointAt(0);
  180. if (!ts9__default.default.isIdentifierStart(ch, languageVersion)) {
  181. return false;
  182. }
  183. for (let i = charSize(ch); i < text.length; i += charSize(ch)) {
  184. ch = text.codePointAt(i);
  185. if (!ts9__default.default.isIdentifierPart(ch, languageVersion)) {
  186. return false;
  187. }
  188. }
  189. return true;
  190. }
  191. function charSize(ch) {
  192. return ch >= 65536 ? 2 : 1;
  193. }
  194. // src/nodes/access.ts
  195. var AccessKind = /* @__PURE__ */ ((AccessKind2) => {
  196. AccessKind2[AccessKind2["None"] = 0] = "None";
  197. AccessKind2[AccessKind2["Read"] = 1] = "Read";
  198. AccessKind2[AccessKind2["Write"] = 2] = "Write";
  199. AccessKind2[AccessKind2["Delete"] = 4] = "Delete";
  200. AccessKind2[AccessKind2["ReadWrite"] = 3] = "ReadWrite";
  201. return AccessKind2;
  202. })(AccessKind || {});
  203. function getAccessKind(node) {
  204. const parent = node.parent;
  205. switch (parent.kind) {
  206. case ts9__default.default.SyntaxKind.ArrayLiteralExpression:
  207. case ts9__default.default.SyntaxKind.SpreadAssignment:
  208. case ts9__default.default.SyntaxKind.SpreadElement:
  209. return isInDestructuringAssignment(
  210. parent
  211. ) ? 2 /* Write */ : 1 /* Read */;
  212. case ts9__default.default.SyntaxKind.ArrowFunction:
  213. return parent.body === node ? 1 /* Read */ : 2 /* Write */;
  214. case ts9__default.default.SyntaxKind.AsExpression:
  215. case ts9__default.default.SyntaxKind.NonNullExpression:
  216. case ts9__default.default.SyntaxKind.ParenthesizedExpression:
  217. case ts9__default.default.SyntaxKind.TypeAssertionExpression:
  218. return getAccessKind(parent);
  219. case ts9__default.default.SyntaxKind.AwaitExpression:
  220. case ts9__default.default.SyntaxKind.CallExpression:
  221. case ts9__default.default.SyntaxKind.CaseClause:
  222. case ts9__default.default.SyntaxKind.ComputedPropertyName:
  223. case ts9__default.default.SyntaxKind.ConditionalExpression:
  224. case ts9__default.default.SyntaxKind.Decorator:
  225. case ts9__default.default.SyntaxKind.DoStatement:
  226. case ts9__default.default.SyntaxKind.ElementAccessExpression:
  227. case ts9__default.default.SyntaxKind.ExpressionStatement:
  228. case ts9__default.default.SyntaxKind.ForStatement:
  229. case ts9__default.default.SyntaxKind.IfStatement:
  230. case ts9__default.default.SyntaxKind.JsxElement:
  231. case ts9__default.default.SyntaxKind.JsxExpression:
  232. case ts9__default.default.SyntaxKind.JsxOpeningElement:
  233. case ts9__default.default.SyntaxKind.JsxSelfClosingElement:
  234. case ts9__default.default.SyntaxKind.JsxSpreadAttribute:
  235. case ts9__default.default.SyntaxKind.NewExpression:
  236. case ts9__default.default.SyntaxKind.ReturnStatement:
  237. case ts9__default.default.SyntaxKind.SwitchStatement:
  238. case ts9__default.default.SyntaxKind.TaggedTemplateExpression:
  239. case ts9__default.default.SyntaxKind.TemplateSpan:
  240. case ts9__default.default.SyntaxKind.ThrowStatement:
  241. case ts9__default.default.SyntaxKind.TypeOfExpression:
  242. case ts9__default.default.SyntaxKind.VoidExpression:
  243. case ts9__default.default.SyntaxKind.WhileStatement:
  244. case ts9__default.default.SyntaxKind.WithStatement:
  245. case ts9__default.default.SyntaxKind.YieldExpression:
  246. return 1 /* Read */;
  247. case ts9__default.default.SyntaxKind.BinaryExpression:
  248. return parent.right === node ? 1 /* Read */ : !isAssignmentKind(parent.operatorToken.kind) ? 1 /* Read */ : parent.operatorToken.kind === ts9__default.default.SyntaxKind.EqualsToken ? 2 /* Write */ : 3 /* ReadWrite */;
  249. case ts9__default.default.SyntaxKind.BindingElement:
  250. case ts9__default.default.SyntaxKind.EnumMember:
  251. case ts9__default.default.SyntaxKind.JsxAttribute:
  252. case ts9__default.default.SyntaxKind.Parameter:
  253. case ts9__default.default.SyntaxKind.PropertyDeclaration:
  254. case ts9__default.default.SyntaxKind.VariableDeclaration:
  255. return parent.initializer === node ? 1 /* Read */ : 0 /* None */;
  256. case ts9__default.default.SyntaxKind.DeleteExpression:
  257. return 4 /* Delete */;
  258. case ts9__default.default.SyntaxKind.ExportAssignment:
  259. return parent.isExportEquals ? 1 /* Read */ : 0 /* None */;
  260. case ts9__default.default.SyntaxKind.ExpressionWithTypeArguments:
  261. return parent.parent.token === ts9__default.default.SyntaxKind.ExtendsKeyword && parent.parent.parent.kind !== ts9__default.default.SyntaxKind.InterfaceDeclaration ? 1 /* Read */ : 0 /* None */;
  262. case ts9__default.default.SyntaxKind.ForInStatement:
  263. case ts9__default.default.SyntaxKind.ForOfStatement:
  264. return parent.initializer === node ? 2 /* Write */ : 1 /* Read */;
  265. case ts9__default.default.SyntaxKind.PostfixUnaryExpression:
  266. return 3 /* ReadWrite */;
  267. case ts9__default.default.SyntaxKind.PrefixUnaryExpression:
  268. return parent.operator === ts9__default.default.SyntaxKind.PlusPlusToken || parent.operator === ts9__default.default.SyntaxKind.MinusMinusToken ? 3 /* ReadWrite */ : 1 /* Read */;
  269. case ts9__default.default.SyntaxKind.PropertyAccessExpression:
  270. return parent.expression === node ? 1 /* Read */ : 0 /* None */;
  271. case ts9__default.default.SyntaxKind.PropertyAssignment:
  272. return parent.name === node ? 0 /* None */ : isInDestructuringAssignment(parent) ? 2 /* Write */ : 1 /* Read */;
  273. case ts9__default.default.SyntaxKind.ShorthandPropertyAssignment:
  274. return parent.objectAssignmentInitializer === node ? 1 /* Read */ : isInDestructuringAssignment(parent) ? 2 /* Write */ : 1 /* Read */;
  275. }
  276. return 0 /* None */;
  277. }
  278. function isInDestructuringAssignment(node) {
  279. switch (node.kind) {
  280. case ts9__default.default.SyntaxKind.ShorthandPropertyAssignment:
  281. if (node.objectAssignmentInitializer !== void 0) {
  282. return true;
  283. }
  284. // falls through
  285. case ts9__default.default.SyntaxKind.PropertyAssignment:
  286. case ts9__default.default.SyntaxKind.SpreadAssignment:
  287. node = node.parent;
  288. break;
  289. case ts9__default.default.SyntaxKind.SpreadElement:
  290. if (node.parent.kind !== ts9__default.default.SyntaxKind.ArrayLiteralExpression) {
  291. return false;
  292. }
  293. node = node.parent;
  294. }
  295. while (true) {
  296. switch (node.parent.kind) {
  297. case ts9__default.default.SyntaxKind.ArrayLiteralExpression:
  298. case ts9__default.default.SyntaxKind.ObjectLiteralExpression:
  299. node = node.parent;
  300. break;
  301. case ts9__default.default.SyntaxKind.BinaryExpression:
  302. return node.parent.left === node && node.parent.operatorToken.kind === ts9__default.default.SyntaxKind.EqualsToken;
  303. case ts9__default.default.SyntaxKind.ForOfStatement:
  304. return node.parent.initializer === node;
  305. case ts9__default.default.SyntaxKind.PropertyAssignment:
  306. case ts9__default.default.SyntaxKind.SpreadAssignment:
  307. node = node.parent.parent;
  308. break;
  309. case ts9__default.default.SyntaxKind.SpreadElement:
  310. if (node.parent.parent.kind !== ts9__default.default.SyntaxKind.ArrayLiteralExpression) {
  311. return false;
  312. }
  313. node = node.parent.parent;
  314. break;
  315. default:
  316. return false;
  317. }
  318. }
  319. }
  320. function isAbstractKeyword(node) {
  321. return node.kind === ts9__default.default.SyntaxKind.AbstractKeyword;
  322. }
  323. function isAccessorKeyword(node) {
  324. return node.kind === ts9__default.default.SyntaxKind.AccessorKeyword;
  325. }
  326. function isAnyKeyword(node) {
  327. return node.kind === ts9__default.default.SyntaxKind.AnyKeyword;
  328. }
  329. function isAssertKeyword(node) {
  330. return node.kind === ts9__default.default.SyntaxKind.AssertKeyword;
  331. }
  332. function isAssertsKeyword(node) {
  333. return node.kind === ts9__default.default.SyntaxKind.AssertsKeyword;
  334. }
  335. function isAsyncKeyword(node) {
  336. return node.kind === ts9__default.default.SyntaxKind.AsyncKeyword;
  337. }
  338. function isAwaitKeyword(node) {
  339. return node.kind === ts9__default.default.SyntaxKind.AwaitKeyword;
  340. }
  341. function isBigIntKeyword(node) {
  342. return node.kind === ts9__default.default.SyntaxKind.BigIntKeyword;
  343. }
  344. function isBooleanKeyword(node) {
  345. return node.kind === ts9__default.default.SyntaxKind.BooleanKeyword;
  346. }
  347. function isColonToken(node) {
  348. return node.kind === ts9__default.default.SyntaxKind.ColonToken;
  349. }
  350. function isConstKeyword(node) {
  351. return node.kind === ts9__default.default.SyntaxKind.ConstKeyword;
  352. }
  353. function isDeclareKeyword(node) {
  354. return node.kind === ts9__default.default.SyntaxKind.DeclareKeyword;
  355. }
  356. function isDefaultKeyword(node) {
  357. return node.kind === ts9__default.default.SyntaxKind.DefaultKeyword;
  358. }
  359. function isDotToken(node) {
  360. return node.kind === ts9__default.default.SyntaxKind.DotToken;
  361. }
  362. function isEndOfFileToken(node) {
  363. return node.kind === ts9__default.default.SyntaxKind.EndOfFileToken;
  364. }
  365. function isEqualsGreaterThanToken(node) {
  366. return node.kind === ts9__default.default.SyntaxKind.EqualsGreaterThanToken;
  367. }
  368. function isEqualsToken(node) {
  369. return node.kind === ts9__default.default.SyntaxKind.EqualsToken;
  370. }
  371. function isExclamationToken(node) {
  372. return node.kind === ts9__default.default.SyntaxKind.ExclamationToken;
  373. }
  374. function isExportKeyword(node) {
  375. return node.kind === ts9__default.default.SyntaxKind.ExportKeyword;
  376. }
  377. function isFalseKeyword(node) {
  378. return node.kind === ts9__default.default.SyntaxKind.FalseKeyword;
  379. }
  380. function isFalseLiteral(node) {
  381. return node.kind === ts9__default.default.SyntaxKind.FalseKeyword;
  382. }
  383. function isImportExpression(node) {
  384. return node.kind === ts9__default.default.SyntaxKind.ImportKeyword;
  385. }
  386. function isImportKeyword(node) {
  387. return node.kind === ts9__default.default.SyntaxKind.ImportKeyword;
  388. }
  389. function isInKeyword(node) {
  390. return node.kind === ts9__default.default.SyntaxKind.InKeyword;
  391. }
  392. function isJSDocText(node) {
  393. return node.kind === ts9__default.default.SyntaxKind.JSDocText;
  394. }
  395. function isJsonMinusNumericLiteral(node) {
  396. return node.kind === ts9__default.default.SyntaxKind.PrefixUnaryExpression;
  397. }
  398. function isNeverKeyword(node) {
  399. return node.kind === ts9__default.default.SyntaxKind.NeverKeyword;
  400. }
  401. function isNullKeyword(node) {
  402. return node.kind === ts9__default.default.SyntaxKind.NullKeyword;
  403. }
  404. function isNullLiteral(node) {
  405. return node.kind === ts9__default.default.SyntaxKind.NullKeyword;
  406. }
  407. function isNumberKeyword(node) {
  408. return node.kind === ts9__default.default.SyntaxKind.NumberKeyword;
  409. }
  410. function isObjectKeyword(node) {
  411. return node.kind === ts9__default.default.SyntaxKind.ObjectKeyword;
  412. }
  413. function isOutKeyword(node) {
  414. return node.kind === ts9__default.default.SyntaxKind.OutKeyword;
  415. }
  416. function isOverrideKeyword(node) {
  417. return node.kind === ts9__default.default.SyntaxKind.OverrideKeyword;
  418. }
  419. function isPrivateKeyword(node) {
  420. return node.kind === ts9__default.default.SyntaxKind.PrivateKeyword;
  421. }
  422. function isProtectedKeyword(node) {
  423. return node.kind === ts9__default.default.SyntaxKind.ProtectedKeyword;
  424. }
  425. function isPublicKeyword(node) {
  426. return node.kind === ts9__default.default.SyntaxKind.PublicKeyword;
  427. }
  428. function isQuestionDotToken(node) {
  429. return node.kind === ts9__default.default.SyntaxKind.QuestionDotToken;
  430. }
  431. function isQuestionToken(node) {
  432. return node.kind === ts9__default.default.SyntaxKind.QuestionToken;
  433. }
  434. function isReadonlyKeyword(node) {
  435. return node.kind === ts9__default.default.SyntaxKind.ReadonlyKeyword;
  436. }
  437. function isStaticKeyword(node) {
  438. return node.kind === ts9__default.default.SyntaxKind.StaticKeyword;
  439. }
  440. function isStringKeyword(node) {
  441. return node.kind === ts9__default.default.SyntaxKind.StringKeyword;
  442. }
  443. function isSuperExpression(node) {
  444. return node.kind === ts9__default.default.SyntaxKind.SuperKeyword;
  445. }
  446. function isSuperKeyword(node) {
  447. return node.kind === ts9__default.default.SyntaxKind.SuperKeyword;
  448. }
  449. function isSymbolKeyword(node) {
  450. return node.kind === ts9__default.default.SyntaxKind.SymbolKeyword;
  451. }
  452. function isSyntaxList(node) {
  453. return node.kind === ts9__default.default.SyntaxKind.SyntaxList;
  454. }
  455. function isThisExpression(node) {
  456. return node.kind === ts9__default.default.SyntaxKind.ThisKeyword;
  457. }
  458. function isThisKeyword(node) {
  459. return node.kind === ts9__default.default.SyntaxKind.ThisKeyword;
  460. }
  461. function isTrueKeyword(node) {
  462. return node.kind === ts9__default.default.SyntaxKind.TrueKeyword;
  463. }
  464. function isTrueLiteral(node) {
  465. return node.kind === ts9__default.default.SyntaxKind.TrueKeyword;
  466. }
  467. function isUndefinedKeyword(node) {
  468. return node.kind === ts9__default.default.SyntaxKind.UndefinedKeyword;
  469. }
  470. function isUnknownKeyword(node) {
  471. return node.kind === ts9__default.default.SyntaxKind.UnknownKeyword;
  472. }
  473. function isVoidKeyword(node) {
  474. return node.kind === ts9__default.default.SyntaxKind.VoidKeyword;
  475. }
  476. var [tsMajor, tsMinor] = ts9__default.default.versionMajorMinor.split(".").map((raw) => Number.parseInt(raw, 10));
  477. function isTsVersionAtLeast(major, minor = 0) {
  478. return tsMajor > major || tsMajor === major && tsMinor >= minor;
  479. }
  480. // src/nodes/typeGuards/union.ts
  481. function hasDecorators(node) {
  482. return ts9__default.default.isParameter(node) || ts9__default.default.isPropertyDeclaration(node) || ts9__default.default.isMethodDeclaration(node) || ts9__default.default.isGetAccessorDeclaration(node) || ts9__default.default.isSetAccessorDeclaration(node) || ts9__default.default.isClassExpression(node) || ts9__default.default.isClassDeclaration(node);
  483. }
  484. function hasExpressionInitializer(node) {
  485. return ts9__default.default.isVariableDeclaration(node) || ts9__default.default.isParameter(node) || ts9__default.default.isBindingElement(node) || ts9__default.default.isPropertyDeclaration(node) || ts9__default.default.isPropertyAssignment(node) || ts9__default.default.isEnumMember(node);
  486. }
  487. function hasInitializer(node) {
  488. return hasExpressionInitializer(node) || ts9__default.default.isForStatement(node) || ts9__default.default.isForInStatement(node) || ts9__default.default.isForOfStatement(node) || ts9__default.default.isJsxAttribute(node);
  489. }
  490. function hasJSDoc(node) {
  491. if (
  492. // eslint-disable-next-line @typescript-eslint/no-deprecated -- Keep compatibility with ts <5
  493. isAccessorDeclaration(node) || ts9__default.default.isArrowFunction(node) || ts9__default.default.isBlock(node) || ts9__default.default.isBreakStatement(node) || ts9__default.default.isCallSignatureDeclaration(node) || ts9__default.default.isCaseClause(node) || // eslint-disable-next-line @typescript-eslint/no-deprecated -- Keep compatibility with ts <5
  494. isClassLikeDeclaration(node) || ts9__default.default.isConstructorDeclaration(node) || ts9__default.default.isConstructorTypeNode(node) || ts9__default.default.isConstructSignatureDeclaration(node) || ts9__default.default.isContinueStatement(node) || ts9__default.default.isDebuggerStatement(node) || ts9__default.default.isDoStatement(node) || ts9__default.default.isEmptyStatement(node) || isEndOfFileToken(node) || ts9__default.default.isEnumDeclaration(node) || ts9__default.default.isEnumMember(node) || ts9__default.default.isExportAssignment(node) || ts9__default.default.isExportDeclaration(node) || ts9__default.default.isExportSpecifier(node) || ts9__default.default.isExpressionStatement(node) || ts9__default.default.isForInStatement(node) || ts9__default.default.isForOfStatement(node) || ts9__default.default.isForStatement(node) || ts9__default.default.isFunctionDeclaration(node) || ts9__default.default.isFunctionExpression(node) || ts9__default.default.isFunctionTypeNode(node) || ts9__default.default.isIfStatement(node) || ts9__default.default.isImportDeclaration(node) || ts9__default.default.isImportEqualsDeclaration(node) || ts9__default.default.isIndexSignatureDeclaration(node) || ts9__default.default.isInterfaceDeclaration(node) || ts9__default.default.isJSDocFunctionType(node) || ts9__default.default.isLabeledStatement(node) || ts9__default.default.isMethodDeclaration(node) || ts9__default.default.isMethodSignature(node) || ts9__default.default.isModuleDeclaration(node) || ts9__default.default.isNamedTupleMember(node) || ts9__default.default.isNamespaceExportDeclaration(node) || ts9__default.default.isParameter(node) || ts9__default.default.isParenthesizedExpression(node) || ts9__default.default.isPropertyAssignment(node) || ts9__default.default.isPropertyDeclaration(node) || ts9__default.default.isPropertySignature(node) || ts9__default.default.isReturnStatement(node) || ts9__default.default.isShorthandPropertyAssignment(node) || ts9__default.default.isSpreadAssignment(node) || ts9__default.default.isSwitchStatement(node) || ts9__default.default.isThrowStatement(node) || ts9__default.default.isTryStatement(node) || ts9__default.default.isTypeAliasDeclaration(node) || ts9__default.default.isVariableDeclaration(node) || ts9__default.default.isVariableStatement(node) || ts9__default.default.isWhileStatement(node) || ts9__default.default.isWithStatement(node)
  495. ) {
  496. return true;
  497. }
  498. if (isTsVersionAtLeast(4, 4) && ts9__default.default.isClassStaticBlockDeclaration(node)) {
  499. return true;
  500. }
  501. if (isTsVersionAtLeast(5, 0) && (ts9__default.default.isBinaryExpression(node) || ts9__default.default.isElementAccessExpression(node) || ts9__default.default.isIdentifier(node) || ts9__default.default.isJSDocSignature(node) || ts9__default.default.isObjectLiteralExpression(node) || ts9__default.default.isPropertyAccessExpression(node) || ts9__default.default.isTypeParameterDeclaration(node))) {
  502. return true;
  503. }
  504. return false;
  505. }
  506. function hasModifiers(node) {
  507. return ts9__default.default.isTypeParameterDeclaration(node) || ts9__default.default.isParameter(node) || ts9__default.default.isConstructorTypeNode(node) || ts9__default.default.isPropertySignature(node) || ts9__default.default.isPropertyDeclaration(node) || ts9__default.default.isMethodSignature(node) || ts9__default.default.isMethodDeclaration(node) || ts9__default.default.isConstructorDeclaration(node) || ts9__default.default.isGetAccessorDeclaration(node) || ts9__default.default.isSetAccessorDeclaration(node) || ts9__default.default.isIndexSignatureDeclaration(node) || ts9__default.default.isFunctionExpression(node) || ts9__default.default.isArrowFunction(node) || ts9__default.default.isClassExpression(node) || ts9__default.default.isVariableStatement(node) || ts9__default.default.isFunctionDeclaration(node) || ts9__default.default.isClassDeclaration(node) || ts9__default.default.isInterfaceDeclaration(node) || ts9__default.default.isTypeAliasDeclaration(node) || ts9__default.default.isEnumDeclaration(node) || ts9__default.default.isModuleDeclaration(node) || ts9__default.default.isImportEqualsDeclaration(node) || ts9__default.default.isImportDeclaration(node) || ts9__default.default.isExportAssignment(node) || ts9__default.default.isExportDeclaration(node);
  508. }
  509. function hasType(node) {
  510. return isSignatureDeclaration(node) || ts9__default.default.isVariableDeclaration(node) || ts9__default.default.isParameter(node) || ts9__default.default.isPropertySignature(node) || ts9__default.default.isPropertyDeclaration(node) || ts9__default.default.isTypePredicateNode(node) || ts9__default.default.isParenthesizedTypeNode(node) || ts9__default.default.isTypeOperatorNode(node) || ts9__default.default.isMappedTypeNode(node) || ts9__default.default.isAssertionExpression(node) || ts9__default.default.isTypeAliasDeclaration(node) || ts9__default.default.isJSDocTypeExpression(node) || ts9__default.default.isJSDocNonNullableType(node) || ts9__default.default.isJSDocNullableType(node) || ts9__default.default.isJSDocOptionalType(node) || ts9__default.default.isJSDocVariadicType(node);
  511. }
  512. function hasTypeArguments(node) {
  513. return ts9__default.default.isCallExpression(node) || ts9__default.default.isNewExpression(node) || ts9__default.default.isTaggedTemplateExpression(node) || ts9__default.default.isJsxOpeningElement(node) || ts9__default.default.isJsxSelfClosingElement(node);
  514. }
  515. function isAccessExpression(node) {
  516. return ts9__default.default.isPropertyAccessExpression(node) || ts9__default.default.isElementAccessExpression(node);
  517. }
  518. function isAccessibilityModifier(node) {
  519. return isPublicKeyword(node) || isPrivateKeyword(node) || isProtectedKeyword(node);
  520. }
  521. function isAccessorDeclaration(node) {
  522. return ts9__default.default.isGetAccessorDeclaration(node) || ts9__default.default.isSetAccessorDeclaration(node);
  523. }
  524. function isArrayBindingElement(node) {
  525. return ts9__default.default.isBindingElement(node) || ts9__default.default.isOmittedExpression(node);
  526. }
  527. function isArrayBindingOrAssignmentPattern(node) {
  528. return ts9__default.default.isArrayBindingPattern(node) || ts9__default.default.isArrayLiteralExpression(node);
  529. }
  530. function isAssignmentPattern(node) {
  531. return ts9__default.default.isObjectLiteralExpression(node) || ts9__default.default.isArrayLiteralExpression(node);
  532. }
  533. function isBindingOrAssignmentElementRestIndicator(node) {
  534. if (ts9__default.default.isSpreadElement(node) || ts9__default.default.isSpreadAssignment(node)) {
  535. return true;
  536. }
  537. if (isTsVersionAtLeast(4, 4)) {
  538. return ts9__default.default.isDotDotDotToken(node);
  539. }
  540. return false;
  541. }
  542. function isBindingOrAssignmentElementTarget(node) {
  543. return isBindingOrAssignmentPattern(node) || ts9__default.default.isIdentifier(node) || ts9__default.default.isPropertyAccessExpression(node) || ts9__default.default.isElementAccessExpression(node) || ts9__default.default.isOmittedExpression(node);
  544. }
  545. function isBindingOrAssignmentPattern(node) {
  546. return isObjectBindingOrAssignmentPattern(node) || isArrayBindingOrAssignmentPattern(node);
  547. }
  548. function isBindingPattern(node) {
  549. return ts9__default.default.isObjectBindingPattern(node) || ts9__default.default.isArrayBindingPattern(node);
  550. }
  551. function isBlockLike(node) {
  552. return ts9__default.default.isSourceFile(node) || ts9__default.default.isBlock(node) || ts9__default.default.isModuleBlock(node) || ts9__default.default.isCaseOrDefaultClause(node);
  553. }
  554. function isBooleanLiteral(node) {
  555. return isTrueLiteral(node) || isFalseLiteral(node);
  556. }
  557. function isClassLikeDeclaration(node) {
  558. return ts9__default.default.isClassDeclaration(node) || ts9__default.default.isClassExpression(node);
  559. }
  560. function isClassMemberModifier(node) {
  561. return isAccessibilityModifier(node) || isReadonlyKeyword(node) || isStaticKeyword(node) || isAccessorKeyword(node);
  562. }
  563. function isDeclarationName(node) {
  564. return ts9__default.default.isIdentifier(node) || ts9__default.default.isPrivateIdentifier(node) || ts9__default.default.isStringLiteralLike(node) || ts9__default.default.isNumericLiteral(node) || ts9__default.default.isComputedPropertyName(node) || ts9__default.default.isElementAccessExpression(node) || isBindingPattern(node) || isEntityNameExpression(node);
  565. }
  566. function isDeclarationWithTypeParameterChildren(node) {
  567. return isSignatureDeclaration(node) || // eslint-disable-next-line @typescript-eslint/no-deprecated -- Keep compatibility with ts <5
  568. isClassLikeDeclaration(node) || ts9__default.default.isInterfaceDeclaration(node) || ts9__default.default.isTypeAliasDeclaration(node) || ts9__default.default.isJSDocTemplateTag(node);
  569. }
  570. function isDeclarationWithTypeParameters(node) {
  571. return isDeclarationWithTypeParameterChildren(node) || ts9__default.default.isJSDocTypedefTag(node) || ts9__default.default.isJSDocCallbackTag(node) || ts9__default.default.isJSDocSignature(node);
  572. }
  573. function isDestructuringPattern(node) {
  574. return isBindingPattern(node) || ts9__default.default.isObjectLiteralExpression(node) || ts9__default.default.isArrayLiteralExpression(node);
  575. }
  576. function isEntityNameExpression(node) {
  577. return ts9__default.default.isIdentifier(node) || isPropertyAccessEntityNameExpression(node);
  578. }
  579. function isEntityNameOrEntityNameExpression(node) {
  580. return ts9__default.default.isEntityName(node) || isEntityNameExpression(node);
  581. }
  582. function isForInOrOfStatement(node) {
  583. return ts9__default.default.isForInStatement(node) || ts9__default.default.isForOfStatement(node);
  584. }
  585. function isFunctionLikeDeclaration(node) {
  586. return ts9__default.default.isFunctionDeclaration(node) || ts9__default.default.isMethodDeclaration(node) || ts9__default.default.isGetAccessorDeclaration(node) || ts9__default.default.isSetAccessorDeclaration(node) || ts9__default.default.isConstructorDeclaration(node) || ts9__default.default.isFunctionExpression(node) || ts9__default.default.isArrowFunction(node);
  587. }
  588. function isJSDocComment(node) {
  589. if (isJSDocText(node)) {
  590. return true;
  591. }
  592. if (isTsVersionAtLeast(4, 4)) {
  593. return ts9__default.default.isJSDocLink(node) || ts9__default.default.isJSDocLinkCode(node) || ts9__default.default.isJSDocLinkPlain(node);
  594. }
  595. return false;
  596. }
  597. function isJSDocNamespaceBody(node) {
  598. return ts9__default.default.isIdentifier(node) || isJSDocNamespaceDeclaration(node);
  599. }
  600. function isJSDocTypeReferencingNode(node) {
  601. return ts9__default.default.isJSDocVariadicType(node) || ts9__default.default.isJSDocOptionalType(node) || ts9__default.default.isJSDocNullableType(node) || ts9__default.default.isJSDocNonNullableType(node);
  602. }
  603. function isJsonObjectExpression(node) {
  604. return ts9__default.default.isObjectLiteralExpression(node) || ts9__default.default.isArrayLiteralExpression(node) || isJsonMinusNumericLiteral(node) || ts9__default.default.isNumericLiteral(node) || ts9__default.default.isStringLiteral(node) || isBooleanLiteral(node) || isNullLiteral(node);
  605. }
  606. function isJsxAttributeLike(node) {
  607. return ts9__default.default.isJsxAttribute(node) || ts9__default.default.isJsxSpreadAttribute(node);
  608. }
  609. function isJsxAttributeValue(node) {
  610. return ts9__default.default.isStringLiteral(node) || ts9__default.default.isJsxExpression(node) || ts9__default.default.isJsxElement(node) || ts9__default.default.isJsxSelfClosingElement(node) || ts9__default.default.isJsxFragment(node);
  611. }
  612. function isJsxChild(node) {
  613. return ts9__default.default.isJsxText(node) || ts9__default.default.isJsxExpression(node) || ts9__default.default.isJsxElement(node) || ts9__default.default.isJsxSelfClosingElement(node) || ts9__default.default.isJsxFragment(node);
  614. }
  615. function isJsxTagNameExpression(node) {
  616. return ts9__default.default.isIdentifier(node) || isThisExpression(node) || isJsxTagNamePropertyAccess(node);
  617. }
  618. function isLiteralToken(node) {
  619. return ts9__default.default.isNumericLiteral(node) || ts9__default.default.isBigIntLiteral(node) || ts9__default.default.isStringLiteral(node) || ts9__default.default.isJsxText(node) || ts9__default.default.isRegularExpressionLiteral(node) || ts9__default.default.isNoSubstitutionTemplateLiteral(node);
  620. }
  621. function isModuleBody(node) {
  622. return isNamespaceBody(node) || isJSDocNamespaceBody(node);
  623. }
  624. function isModuleName(node) {
  625. return ts9__default.default.isIdentifier(node) || ts9__default.default.isStringLiteral(node);
  626. }
  627. function isModuleReference(node) {
  628. return ts9__default.default.isEntityName(node) || ts9__default.default.isExternalModuleReference(node);
  629. }
  630. function isNamedImportBindings(node) {
  631. return ts9__default.default.isNamespaceImport(node) || ts9__default.default.isNamedImports(node);
  632. }
  633. function isNamedImportsOrExports(node) {
  634. return ts9__default.default.isNamedImports(node) || ts9__default.default.isNamedExports(node);
  635. }
  636. function isNamespaceBody(node) {
  637. return ts9__default.default.isModuleBlock(node) || isNamespaceDeclaration(node);
  638. }
  639. function isObjectBindingOrAssignmentElement(node) {
  640. return ts9__default.default.isBindingElement(node) || ts9__default.default.isPropertyAssignment(node) || ts9__default.default.isShorthandPropertyAssignment(node) || ts9__default.default.isSpreadAssignment(node);
  641. }
  642. function isObjectBindingOrAssignmentPattern(node) {
  643. return ts9__default.default.isObjectBindingPattern(node) || ts9__default.default.isObjectLiteralExpression(node);
  644. }
  645. function isObjectTypeDeclaration(node) {
  646. return (
  647. // eslint-disable-next-line @typescript-eslint/no-deprecated -- Keep compatibility with ts <5
  648. isClassLikeDeclaration(node) || ts9__default.default.isInterfaceDeclaration(node) || ts9__default.default.isTypeLiteralNode(node)
  649. );
  650. }
  651. function isParameterPropertyModifier(node) {
  652. return isAccessibilityModifier(node) || isReadonlyKeyword(node);
  653. }
  654. function isPropertyNameLiteral(node) {
  655. return ts9__default.default.isIdentifier(node) || ts9__default.default.isStringLiteralLike(node) || ts9__default.default.isNumericLiteral(node);
  656. }
  657. function isPseudoLiteralToken(node) {
  658. return ts9__default.default.isTemplateHead(node) || ts9__default.default.isTemplateMiddle(node) || ts9__default.default.isTemplateTail(node);
  659. }
  660. function isSignatureDeclaration(node) {
  661. return ts9__default.default.isCallSignatureDeclaration(node) || ts9__default.default.isConstructSignatureDeclaration(node) || ts9__default.default.isMethodSignature(node) || ts9__default.default.isIndexSignatureDeclaration(node) || ts9__default.default.isFunctionTypeNode(node) || ts9__default.default.isConstructorTypeNode(node) || ts9__default.default.isJSDocFunctionType(node) || ts9__default.default.isFunctionDeclaration(node) || ts9__default.default.isMethodDeclaration(node) || ts9__default.default.isConstructorDeclaration(node) || // eslint-disable-next-line @typescript-eslint/no-deprecated -- Keep compatibility with ts <5
  662. isAccessorDeclaration(node) || ts9__default.default.isFunctionExpression(node) || ts9__default.default.isArrowFunction(node);
  663. }
  664. function isSuperProperty(node) {
  665. return isSuperPropertyAccessExpression(node) || isSuperElementAccessExpression(node);
  666. }
  667. function isTypeOnlyCompatibleAliasDeclaration(node) {
  668. if (ts9__default.default.isImportClause(node) || ts9__default.default.isImportEqualsDeclaration(node) || ts9__default.default.isNamespaceImport(node) || ts9__default.default.isImportOrExportSpecifier(node)) {
  669. return true;
  670. }
  671. if (isTsVersionAtLeast(5, 0) && (ts9__default.default.isExportDeclaration(node) || ts9__default.default.isNamespaceExport(node))) {
  672. return true;
  673. }
  674. return false;
  675. }
  676. function isTypeReferenceType(node) {
  677. return ts9__default.default.isTypeReferenceNode(node) || ts9__default.default.isExpressionWithTypeArguments(node);
  678. }
  679. function isUnionOrIntersectionTypeNode(node) {
  680. return ts9__default.default.isUnionTypeNode(node) || ts9__default.default.isIntersectionTypeNode(node);
  681. }
  682. function isVariableLikeDeclaration(node) {
  683. return ts9__default.default.isVariableDeclaration(node) || ts9__default.default.isParameter(node) || ts9__default.default.isBindingElement(node) || ts9__default.default.isPropertyDeclaration(node) || ts9__default.default.isPropertyAssignment(node) || ts9__default.default.isPropertySignature(node) || ts9__default.default.isJsxAttribute(node) || ts9__default.default.isShorthandPropertyAssignment(node) || ts9__default.default.isEnumMember(node) || ts9__default.default.isJSDocPropertyTag(node) || ts9__default.default.isJSDocParameterTag(node);
  684. }
  685. // src/nodes/typeGuards/compound.ts
  686. function isConstAssertionExpression(node) {
  687. return ts9__default.default.isTypeReferenceNode(node.type) && ts9__default.default.isIdentifier(node.type.typeName) && node.type.typeName.escapedText === "const";
  688. }
  689. function isIterationStatement(node) {
  690. switch (node.kind) {
  691. case ts9__default.default.SyntaxKind.DoStatement:
  692. case ts9__default.default.SyntaxKind.ForInStatement:
  693. case ts9__default.default.SyntaxKind.ForOfStatement:
  694. case ts9__default.default.SyntaxKind.ForStatement:
  695. case ts9__default.default.SyntaxKind.WhileStatement:
  696. return true;
  697. default:
  698. return false;
  699. }
  700. }
  701. function isJSDocNamespaceDeclaration(node) {
  702. return ts9__default.default.isModuleDeclaration(node) && ts9__default.default.isIdentifier(node.name) && (node.body === void 0 || isJSDocNamespaceBody(node.body));
  703. }
  704. function isJsxTagNamePropertyAccess(node) {
  705. return ts9__default.default.isPropertyAccessExpression(node) && // eslint-disable-next-line @typescript-eslint/no-deprecated -- Keep compatibility with ts < 5
  706. isJsxTagNameExpression(node.expression);
  707. }
  708. function isNamedDeclarationWithName(node) {
  709. return "name" in node && node.name !== void 0 && node.name !== null && isDeclarationName(node.name);
  710. }
  711. function isNamespaceDeclaration(node) {
  712. return ts9__default.default.isModuleDeclaration(node) && ts9__default.default.isIdentifier(node.name) && node.body !== void 0 && isNamespaceBody(node.body);
  713. }
  714. function isNumericOrStringLikeLiteral(node) {
  715. switch (node.kind) {
  716. case ts9__default.default.SyntaxKind.NoSubstitutionTemplateLiteral:
  717. case ts9__default.default.SyntaxKind.NumericLiteral:
  718. case ts9__default.default.SyntaxKind.StringLiteral:
  719. return true;
  720. default:
  721. return false;
  722. }
  723. }
  724. function isPropertyAccessEntityNameExpression(node) {
  725. return ts9__default.default.isPropertyAccessExpression(node) && ts9__default.default.isIdentifier(node.name) && isEntityNameExpression(node.expression);
  726. }
  727. function isSuperElementAccessExpression(node) {
  728. return ts9__default.default.isElementAccessExpression(node) && isSuperExpression(node.expression);
  729. }
  730. function isSuperPropertyAccessExpression(node) {
  731. return ts9__default.default.isPropertyAccessExpression(node) && isSuperExpression(node.expression);
  732. }
  733. function isFunctionScopeBoundary(node) {
  734. switch (node.kind) {
  735. case ts9__default.default.SyntaxKind.ArrowFunction:
  736. case ts9__default.default.SyntaxKind.CallSignature:
  737. case ts9__default.default.SyntaxKind.ClassDeclaration:
  738. case ts9__default.default.SyntaxKind.ClassExpression:
  739. case ts9__default.default.SyntaxKind.Constructor:
  740. case ts9__default.default.SyntaxKind.ConstructorType:
  741. case ts9__default.default.SyntaxKind.ConstructSignature:
  742. case ts9__default.default.SyntaxKind.EnumDeclaration:
  743. case ts9__default.default.SyntaxKind.FunctionDeclaration:
  744. case ts9__default.default.SyntaxKind.FunctionExpression:
  745. case ts9__default.default.SyntaxKind.FunctionType:
  746. case ts9__default.default.SyntaxKind.GetAccessor:
  747. case ts9__default.default.SyntaxKind.MethodDeclaration:
  748. case ts9__default.default.SyntaxKind.MethodSignature:
  749. case ts9__default.default.SyntaxKind.ModuleDeclaration:
  750. case ts9__default.default.SyntaxKind.SetAccessor:
  751. return true;
  752. case ts9__default.default.SyntaxKind.SourceFile:
  753. return ts9__default.default.isExternalModule(node);
  754. default:
  755. return false;
  756. }
  757. }
  758. function isIntrinsicAnyType(type) {
  759. return isTypeFlagSet(type, ts9__default.default.TypeFlags.Any);
  760. }
  761. function isIntrinsicBigIntType(type) {
  762. return isTypeFlagSet(type, ts9__default.default.TypeFlags.BigInt);
  763. }
  764. function isIntrinsicBooleanType(type) {
  765. return isTypeFlagSet(type, ts9__default.default.TypeFlags.Boolean);
  766. }
  767. function isIntrinsicErrorType(type) {
  768. return isIntrinsicType(type) && type.intrinsicName === "error";
  769. }
  770. function isIntrinsicESSymbolType(type) {
  771. return isTypeFlagSet(type, ts9__default.default.TypeFlags.ESSymbol);
  772. }
  773. var IntrinsicTypeFlags = ts9__default.default.TypeFlags.Intrinsic ?? ts9__default.default.TypeFlags.Any | ts9__default.default.TypeFlags.Unknown | ts9__default.default.TypeFlags.String | ts9__default.default.TypeFlags.Number | ts9__default.default.TypeFlags.BigInt | ts9__default.default.TypeFlags.Boolean | ts9__default.default.TypeFlags.BooleanLiteral | ts9__default.default.TypeFlags.ESSymbol | ts9__default.default.TypeFlags.Void | ts9__default.default.TypeFlags.Undefined | ts9__default.default.TypeFlags.Null | ts9__default.default.TypeFlags.Never | ts9__default.default.TypeFlags.NonPrimitive;
  774. function isIntrinsicNeverType(type) {
  775. return isTypeFlagSet(type, ts9__default.default.TypeFlags.Never);
  776. }
  777. function isIntrinsicNonPrimitiveType(type) {
  778. return isTypeFlagSet(type, ts9__default.default.TypeFlags.NonPrimitive);
  779. }
  780. function isIntrinsicNullType(type) {
  781. return isTypeFlagSet(type, ts9__default.default.TypeFlags.Null);
  782. }
  783. function isIntrinsicNumberType(type) {
  784. return isTypeFlagSet(type, ts9__default.default.TypeFlags.Number);
  785. }
  786. function isIntrinsicStringType(type) {
  787. return isTypeFlagSet(type, ts9__default.default.TypeFlags.String);
  788. }
  789. function isIntrinsicType(type) {
  790. return isTypeFlagSet(type, IntrinsicTypeFlags);
  791. }
  792. function isIntrinsicUndefinedType(type) {
  793. return isTypeFlagSet(type, ts9__default.default.TypeFlags.Undefined);
  794. }
  795. function isIntrinsicUnknownType(type) {
  796. return isTypeFlagSet(type, ts9__default.default.TypeFlags.Unknown);
  797. }
  798. function isIntrinsicVoidType(type) {
  799. return isTypeFlagSet(type, ts9__default.default.TypeFlags.Void);
  800. }
  801. function isConditionalType(type) {
  802. return isTypeFlagSet(type, ts9__default.default.TypeFlags.Conditional);
  803. }
  804. function isEnumType(type) {
  805. return isTypeFlagSet(type, ts9__default.default.TypeFlags.Enum);
  806. }
  807. function isFreshableType(type) {
  808. return isTypeFlagSet(type, ts9__default.default.TypeFlags.Freshable);
  809. }
  810. function isIndexedAccessType(type) {
  811. return isTypeFlagSet(type, ts9__default.default.TypeFlags.IndexedAccess);
  812. }
  813. function isIndexType(type) {
  814. return isTypeFlagSet(type, ts9__default.default.TypeFlags.Index);
  815. }
  816. function isInstantiableType(type) {
  817. return isTypeFlagSet(type, ts9__default.default.TypeFlags.Instantiable);
  818. }
  819. function isIntersectionType(type) {
  820. return isTypeFlagSet(type, ts9__default.default.TypeFlags.Intersection);
  821. }
  822. function isObjectType(type) {
  823. return isTypeFlagSet(type, ts9__default.default.TypeFlags.Object);
  824. }
  825. function isStringMappingType(type) {
  826. return isTypeFlagSet(type, ts9__default.default.TypeFlags.StringMapping);
  827. }
  828. function isSubstitutionType(type) {
  829. return isTypeFlagSet(type, ts9__default.default.TypeFlags.Substitution);
  830. }
  831. function isTypeParameter(type) {
  832. return isTypeFlagSet(type, ts9__default.default.TypeFlags.TypeParameter);
  833. }
  834. function isTypeVariable(type) {
  835. return isTypeFlagSet(type, ts9__default.default.TypeFlags.TypeVariable);
  836. }
  837. function isUnionOrIntersectionType(type) {
  838. return isTypeFlagSet(type, ts9__default.default.TypeFlags.UnionOrIntersection);
  839. }
  840. function isUnionType(type) {
  841. return isTypeFlagSet(type, ts9__default.default.TypeFlags.Union);
  842. }
  843. function isUniqueESSymbolType(type) {
  844. return isTypeFlagSet(type, ts9__default.default.TypeFlags.UniqueESSymbol);
  845. }
  846. // src/types/typeGuards/objects.ts
  847. function isEvolvingArrayType(type) {
  848. return isObjectType(type) && isObjectFlagSet(type, ts9__default.default.ObjectFlags.EvolvingArray);
  849. }
  850. function isTupleType(type) {
  851. return isObjectType(type) && isObjectFlagSet(type, ts9__default.default.ObjectFlags.Tuple);
  852. }
  853. function isTypeReference(type) {
  854. return isObjectType(type) && isObjectFlagSet(type, ts9__default.default.ObjectFlags.Reference);
  855. }
  856. // src/types/typeGuards/compound.ts
  857. function isFreshableIntrinsicType(type) {
  858. return isIntrinsicType(type) && isFreshableType(type);
  859. }
  860. function isTupleTypeReference(type) {
  861. return isTypeReference(type) && isTupleType(type.target);
  862. }
  863. function isBigIntLiteralType(type) {
  864. return isTypeFlagSet(type, ts9__default.default.TypeFlags.BigIntLiteral);
  865. }
  866. function isBooleanLiteralType(type) {
  867. return isTypeFlagSet(type, ts9__default.default.TypeFlags.BooleanLiteral);
  868. }
  869. function isFalseLiteralType(type) {
  870. return isBooleanLiteralType(type) && type.intrinsicName === "false";
  871. }
  872. function isLiteralType(type) {
  873. return isTypeFlagSet(type, ts9__default.default.TypeFlags.Literal);
  874. }
  875. function isNumberLiteralType(type) {
  876. return isTypeFlagSet(type, ts9__default.default.TypeFlags.NumberLiteral);
  877. }
  878. function isStringLiteralType(type) {
  879. return isTypeFlagSet(type, ts9__default.default.TypeFlags.StringLiteral);
  880. }
  881. function isTemplateLiteralType(type) {
  882. return isTypeFlagSet(type, ts9__default.default.TypeFlags.TemplateLiteral);
  883. }
  884. function isTrueLiteralType(type) {
  885. return isBooleanLiteralType(type) && type.intrinsicName === "true";
  886. }
  887. // src/types/getters.ts
  888. function getCallSignaturesOfType(type) {
  889. if (isUnionType(type)) {
  890. const signatures = [];
  891. for (const subType of type.types) {
  892. signatures.push(...getCallSignaturesOfType(subType));
  893. }
  894. return signatures;
  895. }
  896. if (isIntersectionType(type)) {
  897. let signatures;
  898. for (const subType of type.types) {
  899. const sig = getCallSignaturesOfType(subType);
  900. if (sig.length !== 0) {
  901. if (signatures !== void 0) {
  902. return [];
  903. }
  904. signatures = sig;
  905. }
  906. }
  907. return signatures === void 0 ? [] : signatures;
  908. }
  909. return type.getCallSignatures();
  910. }
  911. function getPropertyOfType(type, name) {
  912. if (!name.startsWith("__")) {
  913. return type.getProperty(name);
  914. }
  915. return type.getProperties().find((s) => s.escapedName === name);
  916. }
  917. function getWellKnownSymbolPropertyOfType(type, wellKnownSymbolName, typeChecker) {
  918. const prefix = "__@" + wellKnownSymbolName;
  919. for (const prop of type.getProperties()) {
  920. if (!prop.name.startsWith(prefix)) {
  921. continue;
  922. }
  923. const declaration = prop.valueDeclaration ?? prop.getDeclarations()?.[0];
  924. if (!declaration || !isNamedDeclarationWithName(declaration) || declaration.name === void 0 || !ts9__default.default.isComputedPropertyName(declaration.name)) {
  925. continue;
  926. }
  927. const globalSymbol = typeChecker.getApparentType(
  928. typeChecker.getTypeAtLocation(declaration.name.expression)
  929. ).symbol;
  930. if (prop.escapedName === getPropertyNameOfWellKnownSymbol(
  931. typeChecker,
  932. globalSymbol,
  933. wellKnownSymbolName
  934. )) {
  935. return prop;
  936. }
  937. }
  938. return void 0;
  939. }
  940. function getPropertyNameOfWellKnownSymbol(typeChecker, symbolConstructor, symbolName) {
  941. const knownSymbol = symbolConstructor && typeChecker.getTypeOfSymbolAtLocation(
  942. symbolConstructor,
  943. // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access
  944. symbolConstructor.valueDeclaration
  945. ).getProperty(symbolName);
  946. const knownSymbolType = knownSymbol && typeChecker.getTypeOfSymbolAtLocation(
  947. knownSymbol,
  948. // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access
  949. knownSymbol.valueDeclaration
  950. );
  951. if (knownSymbolType && isUniqueESSymbolType(knownSymbolType)) {
  952. return knownSymbolType.escapedName;
  953. }
  954. return "__@" + symbolName;
  955. }
  956. function isBindableObjectDefinePropertyCall(node) {
  957. return node.arguments.length === 3 && isEntityNameExpression(node.arguments[0]) && isNumericOrStringLikeLiteral(node.arguments[1]) && ts9__default.default.isPropertyAccessExpression(node.expression) && node.expression.name.escapedText === "defineProperty" && ts9__default.default.isIdentifier(node.expression.expression) && node.expression.expression.escapedText === "Object";
  958. }
  959. function isInConstContext(node, typeChecker) {
  960. let current = node;
  961. while (true) {
  962. const parent = current.parent;
  963. outer: switch (parent.kind) {
  964. case ts9__default.default.SyntaxKind.ArrayLiteralExpression:
  965. case ts9__default.default.SyntaxKind.ObjectLiteralExpression:
  966. case ts9__default.default.SyntaxKind.ParenthesizedExpression:
  967. case ts9__default.default.SyntaxKind.TemplateExpression:
  968. current = parent;
  969. break;
  970. case ts9__default.default.SyntaxKind.AsExpression:
  971. case ts9__default.default.SyntaxKind.TypeAssertionExpression:
  972. return isConstAssertionExpression(parent);
  973. case ts9__default.default.SyntaxKind.CallExpression: {
  974. if (!ts9__default.default.isExpression(current)) {
  975. return false;
  976. }
  977. const functionSignature = typeChecker.getResolvedSignature(
  978. parent
  979. );
  980. if (functionSignature === void 0) {
  981. return false;
  982. }
  983. const argumentIndex = parent.arguments.indexOf(
  984. current
  985. );
  986. if (argumentIndex < 0) {
  987. return false;
  988. }
  989. const parameterSymbol = functionSignature.getParameters()[argumentIndex];
  990. if (parameterSymbol === void 0 || !("links" in parameterSymbol)) {
  991. return false;
  992. }
  993. const parameterSymbolLinks = parameterSymbol.links;
  994. const propertySymbol = parameterSymbolLinks.type?.getProperties()?.[argumentIndex];
  995. if (propertySymbol === void 0 || !("links" in propertySymbol)) {
  996. return false;
  997. }
  998. return !!propertySymbol.links && isTransientSymbolLinksFlagSet(
  999. propertySymbol.links,
  1000. ts9__default.default.CheckFlags.Readonly
  1001. );
  1002. }
  1003. case ts9__default.default.SyntaxKind.PrefixUnaryExpression:
  1004. if (current.kind !== ts9__default.default.SyntaxKind.NumericLiteral) {
  1005. return false;
  1006. }
  1007. switch (parent.operator) {
  1008. case ts9__default.default.SyntaxKind.MinusToken:
  1009. case ts9__default.default.SyntaxKind.PlusToken:
  1010. current = parent;
  1011. break outer;
  1012. default:
  1013. return false;
  1014. }
  1015. case ts9__default.default.SyntaxKind.PropertyAssignment:
  1016. if (parent.initializer !== current) {
  1017. return false;
  1018. }
  1019. current = parent.parent;
  1020. break;
  1021. case ts9__default.default.SyntaxKind.ShorthandPropertyAssignment:
  1022. current = parent.parent;
  1023. break;
  1024. default:
  1025. return false;
  1026. }
  1027. }
  1028. }
  1029. // src/types/utilities.ts
  1030. function intersectionConstituents(type) {
  1031. return isIntersectionType(type) ? type.types : [type];
  1032. }
  1033. var intersectionTypeParts = intersectionConstituents;
  1034. function isFalsyType(type) {
  1035. if (isTypeFlagSet(
  1036. type,
  1037. ts9__default.default.TypeFlags.Undefined | ts9__default.default.TypeFlags.Null | ts9__default.default.TypeFlags.Void
  1038. )) {
  1039. return true;
  1040. }
  1041. if (typeIsLiteral(type)) {
  1042. if (typeof type.value === "object") {
  1043. return type.value.base10Value === "0";
  1044. } else {
  1045. return !type.value;
  1046. }
  1047. }
  1048. return isFalseLiteralType(type);
  1049. }
  1050. function isPropertyReadonlyInType(type, name, typeChecker) {
  1051. let seenProperty = false;
  1052. let seenReadonlySignature = false;
  1053. for (const subType of unionConstituents(type)) {
  1054. if (getPropertyOfType(subType, name) === void 0) {
  1055. const index = (isNumericPropertyName(name) ? typeChecker.getIndexInfoOfType(subType, ts9__default.default.IndexKind.Number) : void 0) ?? typeChecker.getIndexInfoOfType(subType, ts9__default.default.IndexKind.String);
  1056. if (index?.isReadonly) {
  1057. if (seenProperty) {
  1058. return true;
  1059. }
  1060. seenReadonlySignature = true;
  1061. }
  1062. } else if (seenReadonlySignature || isReadonlyPropertyIntersection(subType, name, typeChecker)) {
  1063. return true;
  1064. } else {
  1065. seenProperty = true;
  1066. }
  1067. }
  1068. return false;
  1069. }
  1070. function isThenableType(typeChecker, node, type = typeChecker.getTypeAtLocation(node)) {
  1071. for (const constituent of unionConstituents(
  1072. typeChecker.getApparentType(type)
  1073. )) {
  1074. const then = constituent.getProperty("then");
  1075. if (then === void 0) {
  1076. continue;
  1077. }
  1078. const thenType = typeChecker.getTypeOfSymbolAtLocation(then, node);
  1079. for (const subConstituent of unionConstituents(thenType)) {
  1080. for (const signature of subConstituent.getCallSignatures()) {
  1081. if (signature.parameters.length !== 0 && isCallback(typeChecker, signature.parameters[0], node)) {
  1082. return true;
  1083. }
  1084. }
  1085. }
  1086. }
  1087. return false;
  1088. }
  1089. function symbolHasReadonlyDeclaration(symbol, typeChecker) {
  1090. return !!((symbol.flags & ts9__default.default.SymbolFlags.Accessor) === ts9__default.default.SymbolFlags.GetAccessor || symbol.declarations?.some(
  1091. (node) => isModifierFlagSet(node, ts9__default.default.ModifierFlags.Readonly) || ts9__default.default.isVariableDeclaration(node) && isNodeFlagSet(node.parent, ts9__default.default.NodeFlags.Const) || ts9__default.default.isCallExpression(node) && isReadonlyAssignmentDeclaration(node, typeChecker) || ts9__default.default.isEnumMember(node) || (ts9__default.default.isPropertyAssignment(node) || ts9__default.default.isShorthandPropertyAssignment(node)) && isInConstContext(node, typeChecker)
  1092. ));
  1093. }
  1094. function typeConstituents(type) {
  1095. return isIntersectionType(type) || isUnionType(type) ? type.types : [type];
  1096. }
  1097. function typeIsLiteral(type) {
  1098. if (isTsVersionAtLeast(5, 0)) {
  1099. return type.isLiteral();
  1100. } else {
  1101. return isTypeFlagSet(
  1102. type,
  1103. ts9__default.default.TypeFlags.StringLiteral | ts9__default.default.TypeFlags.NumberLiteral | ts9__default.default.TypeFlags.BigIntLiteral
  1104. );
  1105. }
  1106. }
  1107. var typeParts = typeConstituents;
  1108. function unionConstituents(type) {
  1109. return isUnionType(type) ? type.types : [type];
  1110. }
  1111. var unionTypeParts = unionConstituents;
  1112. function isCallback(typeChecker, param, node) {
  1113. let type = typeChecker.getApparentType(
  1114. typeChecker.getTypeOfSymbolAtLocation(param, node)
  1115. );
  1116. if (param.valueDeclaration.dotDotDotToken) {
  1117. type = type.getNumberIndexType();
  1118. if (type === void 0) {
  1119. return false;
  1120. }
  1121. }
  1122. for (const subType of unionConstituents(type)) {
  1123. if (subType.getCallSignatures().length !== 0) {
  1124. return true;
  1125. }
  1126. }
  1127. return false;
  1128. }
  1129. function isReadonlyAssignmentDeclaration(node, typeChecker) {
  1130. if (!isBindableObjectDefinePropertyCall(node)) {
  1131. return false;
  1132. }
  1133. const descriptorType = typeChecker.getTypeAtLocation(node.arguments[2]);
  1134. if (descriptorType.getProperty("value") === void 0) {
  1135. return descriptorType.getProperty("set") === void 0;
  1136. }
  1137. const writableProp = descriptorType.getProperty("writable");
  1138. if (writableProp === void 0) {
  1139. return false;
  1140. }
  1141. const writableType = writableProp.valueDeclaration !== void 0 && ts9__default.default.isPropertyAssignment(writableProp.valueDeclaration) ? typeChecker.getTypeAtLocation(writableProp.valueDeclaration.initializer) : typeChecker.getTypeOfSymbolAtLocation(writableProp, node.arguments[2]);
  1142. return isFalseLiteralType(writableType);
  1143. }
  1144. function isReadonlyPropertyFromMappedType(type, name, typeChecker) {
  1145. if (!isObjectType(type) || !isObjectFlagSet(type, ts9__default.default.ObjectFlags.Mapped)) {
  1146. return;
  1147. }
  1148. const declaration = type.symbol.declarations[0];
  1149. if (declaration.readonlyToken !== void 0 && !/^__@[^@]+$/.test(name)) {
  1150. return declaration.readonlyToken.kind !== ts9__default.default.SyntaxKind.MinusToken;
  1151. }
  1152. const { modifiersType } = type;
  1153. return modifiersType && isPropertyReadonlyInType(modifiersType, name, typeChecker);
  1154. }
  1155. function isReadonlyPropertyIntersection(type, name, typeChecker) {
  1156. const constituents = intersectionConstituents(type);
  1157. return constituents.some((constituent) => {
  1158. const prop = getPropertyOfType(constituent, name);
  1159. if (prop === void 0) {
  1160. return false;
  1161. }
  1162. if (prop.flags & ts9__default.default.SymbolFlags.Transient) {
  1163. if (/^(?:[1-9]\d*|0)$/.test(name) && isTupleTypeReference(constituent)) {
  1164. return constituent.target.readonly;
  1165. }
  1166. switch (isReadonlyPropertyFromMappedType(constituent, name, typeChecker)) {
  1167. case false:
  1168. return false;
  1169. case true:
  1170. return true;
  1171. }
  1172. }
  1173. return !!// members of namespace import
  1174. (isSymbolFlagSet(prop, ts9__default.default.SymbolFlags.ValueModule) || // we unwrapped every mapped type, now we can check the actual declarations
  1175. // eslint-disable-next-line @typescript-eslint/no-deprecated -- Will be made private-only soon.
  1176. symbolHasReadonlyDeclaration(prop, typeChecker));
  1177. });
  1178. }
  1179. function identifierToKeywordKind(node) {
  1180. return "originalKeywordKind" in node ? node.originalKeywordKind : ts9__default.default.identifierToKeywordKind(node);
  1181. }
  1182. // src/usage/declarations.ts
  1183. var DeclarationDomain = /* @__PURE__ */ ((DeclarationDomain2) => {
  1184. DeclarationDomain2[DeclarationDomain2["Namespace"] = 1] = "Namespace";
  1185. DeclarationDomain2[DeclarationDomain2["Type"] = 2] = "Type";
  1186. DeclarationDomain2[DeclarationDomain2["Value"] = 4] = "Value";
  1187. DeclarationDomain2[DeclarationDomain2["Any"] = 7] = "Any";
  1188. DeclarationDomain2[DeclarationDomain2["Import"] = 8] = "Import";
  1189. return DeclarationDomain2;
  1190. })(DeclarationDomain || {});
  1191. function getDeclarationDomain(node) {
  1192. switch (node.parent.kind) {
  1193. case ts9__default.default.SyntaxKind.ClassDeclaration:
  1194. case ts9__default.default.SyntaxKind.ClassExpression:
  1195. return 2 /* Type */ | 4 /* Value */;
  1196. case ts9__default.default.SyntaxKind.EnumDeclaration:
  1197. return 7 /* Any */;
  1198. case ts9__default.default.SyntaxKind.FunctionDeclaration:
  1199. case ts9__default.default.SyntaxKind.FunctionExpression:
  1200. return 4 /* Value */;
  1201. case ts9__default.default.SyntaxKind.ImportClause:
  1202. case ts9__default.default.SyntaxKind.NamespaceImport:
  1203. return 7 /* Any */ | 8 /* Import */;
  1204. // TODO handle type-only imports
  1205. case ts9__default.default.SyntaxKind.ImportEqualsDeclaration:
  1206. case ts9__default.default.SyntaxKind.ImportSpecifier:
  1207. return node.parent.name === node ? 7 /* Any */ | 8 /* Import */ : void 0;
  1208. case ts9__default.default.SyntaxKind.InterfaceDeclaration:
  1209. case ts9__default.default.SyntaxKind.TypeAliasDeclaration:
  1210. case ts9__default.default.SyntaxKind.TypeParameter:
  1211. return 2 /* Type */;
  1212. case ts9__default.default.SyntaxKind.ModuleDeclaration:
  1213. return 1 /* Namespace */;
  1214. case ts9__default.default.SyntaxKind.Parameter:
  1215. if (node.parent.parent.kind === ts9__default.default.SyntaxKind.IndexSignature || identifierToKeywordKind(node) === ts9__default.default.SyntaxKind.ThisKeyword) {
  1216. return;
  1217. }
  1218. // falls through
  1219. case ts9__default.default.SyntaxKind.BindingElement:
  1220. case ts9__default.default.SyntaxKind.VariableDeclaration:
  1221. return node.parent.name === node ? 4 /* Value */ : void 0;
  1222. }
  1223. }
  1224. function getPropertyName(propertyName) {
  1225. if (propertyName.kind === ts9__default.default.SyntaxKind.ComputedPropertyName) {
  1226. const expression = unwrapParentheses(propertyName.expression);
  1227. if (ts9__default.default.isPrefixUnaryExpression(expression)) {
  1228. let negate = false;
  1229. switch (expression.operator) {
  1230. case ts9__default.default.SyntaxKind.MinusToken:
  1231. negate = true;
  1232. // falls through
  1233. case ts9__default.default.SyntaxKind.PlusToken:
  1234. return ts9__default.default.isNumericLiteral(expression.operand) ? `${negate ? "-" : ""}${expression.operand.text}` : ts9__default.default.isBigIntLiteral(expression.operand) ? `${negate ? "-" : ""}${expression.operand.text.slice(0, -1)}` : void 0;
  1235. default:
  1236. return;
  1237. }
  1238. }
  1239. if (ts9__default.default.isBigIntLiteral(expression)) {
  1240. return expression.text.slice(0, -1);
  1241. }
  1242. if (isNumericOrStringLikeLiteral(expression)) {
  1243. return expression.text;
  1244. }
  1245. return;
  1246. }
  1247. return propertyName.kind === ts9__default.default.SyntaxKind.PrivateIdentifier ? void 0 : propertyName.text;
  1248. }
  1249. function unwrapParentheses(node) {
  1250. while (node.kind === ts9__default.default.SyntaxKind.ParenthesizedExpression) {
  1251. node = node.expression;
  1252. }
  1253. return node;
  1254. }
  1255. var UsageDomain = /* @__PURE__ */ ((UsageDomain2) => {
  1256. UsageDomain2[UsageDomain2["Namespace"] = 1] = "Namespace";
  1257. UsageDomain2[UsageDomain2["Type"] = 2] = "Type";
  1258. UsageDomain2[UsageDomain2["Value"] = 4] = "Value";
  1259. UsageDomain2[UsageDomain2["Any"] = 7] = "Any";
  1260. UsageDomain2[UsageDomain2["TypeQuery"] = 8] = "TypeQuery";
  1261. UsageDomain2[UsageDomain2["ValueOrNamespace"] = 5] = "ValueOrNamespace";
  1262. return UsageDomain2;
  1263. })(UsageDomain || {});
  1264. function getUsageDomain(node) {
  1265. const parent = node.parent;
  1266. switch (parent.kind) {
  1267. // Value
  1268. case ts9__default.default.SyntaxKind.BindingElement:
  1269. if (parent.initializer === node) {
  1270. return 5 /* ValueOrNamespace */;
  1271. }
  1272. break;
  1273. case ts9__default.default.SyntaxKind.BreakStatement:
  1274. case ts9__default.default.SyntaxKind.ClassDeclaration:
  1275. case ts9__default.default.SyntaxKind.ClassExpression:
  1276. case ts9__default.default.SyntaxKind.ContinueStatement:
  1277. case ts9__default.default.SyntaxKind.EnumDeclaration:
  1278. case ts9__default.default.SyntaxKind.FunctionDeclaration:
  1279. case ts9__default.default.SyntaxKind.FunctionExpression:
  1280. case ts9__default.default.SyntaxKind.GetAccessor:
  1281. case ts9__default.default.SyntaxKind.ImportClause:
  1282. case ts9__default.default.SyntaxKind.ImportSpecifier:
  1283. case ts9__default.default.SyntaxKind.InterfaceDeclaration:
  1284. case ts9__default.default.SyntaxKind.JsxAttribute:
  1285. case ts9__default.default.SyntaxKind.LabeledStatement:
  1286. case ts9__default.default.SyntaxKind.MethodDeclaration:
  1287. case ts9__default.default.SyntaxKind.MethodSignature:
  1288. case ts9__default.default.SyntaxKind.ModuleDeclaration:
  1289. case ts9__default.default.SyntaxKind.NamedTupleMember:
  1290. case ts9__default.default.SyntaxKind.NamespaceExport:
  1291. case ts9__default.default.SyntaxKind.NamespaceExportDeclaration:
  1292. case ts9__default.default.SyntaxKind.NamespaceImport:
  1293. case ts9__default.default.SyntaxKind.PropertySignature:
  1294. case ts9__default.default.SyntaxKind.SetAccessor:
  1295. case ts9__default.default.SyntaxKind.TypeAliasDeclaration:
  1296. case ts9__default.default.SyntaxKind.TypeParameter:
  1297. case ts9__default.default.SyntaxKind.TypePredicate:
  1298. break;
  1299. case ts9__default.default.SyntaxKind.EnumMember:
  1300. case ts9__default.default.SyntaxKind.ImportEqualsDeclaration:
  1301. case ts9__default.default.SyntaxKind.Parameter:
  1302. case ts9__default.default.SyntaxKind.PropertyAccessExpression:
  1303. case ts9__default.default.SyntaxKind.PropertyAssignment:
  1304. case ts9__default.default.SyntaxKind.PropertyDeclaration:
  1305. case ts9__default.default.SyntaxKind.VariableDeclaration:
  1306. if (parent.name !== node) {
  1307. return 5 /* ValueOrNamespace */;
  1308. }
  1309. break;
  1310. case ts9__default.default.SyntaxKind.ExportAssignment:
  1311. return 7 /* Any */;
  1312. case ts9__default.default.SyntaxKind.ExportSpecifier:
  1313. if (parent.propertyName === void 0 || parent.propertyName === node) {
  1314. return 7 /* Any */;
  1315. }
  1316. break;
  1317. case ts9__default.default.SyntaxKind.ExpressionWithTypeArguments:
  1318. return parent.parent.token === ts9__default.default.SyntaxKind.ImplementsKeyword || parent.parent.parent.kind === ts9__default.default.SyntaxKind.InterfaceDeclaration ? 2 /* Type */ : 4 /* Value */;
  1319. case ts9__default.default.SyntaxKind.QualifiedName:
  1320. if (parent.left === node) {
  1321. if (getEntityNameParent(parent).kind === ts9__default.default.SyntaxKind.TypeQuery) {
  1322. return 1 /* Namespace */ | 8 /* TypeQuery */;
  1323. }
  1324. return 1 /* Namespace */;
  1325. }
  1326. break;
  1327. case ts9__default.default.SyntaxKind.TypeQuery:
  1328. return 5 /* ValueOrNamespace */ | 8 /* TypeQuery */;
  1329. case ts9__default.default.SyntaxKind.TypeReference:
  1330. return identifierToKeywordKind(node) !== ts9__default.default.SyntaxKind.ConstKeyword ? 2 /* Type */ : void 0;
  1331. default:
  1332. return 5 /* ValueOrNamespace */;
  1333. }
  1334. }
  1335. function getEntityNameParent(name) {
  1336. let parent = name.parent;
  1337. while (parent.kind === ts9__default.default.SyntaxKind.QualifiedName) {
  1338. parent = parent.parent;
  1339. }
  1340. return parent;
  1341. }
  1342. function isBlockScopeBoundary(node) {
  1343. switch (node.kind) {
  1344. case ts9__default.default.SyntaxKind.Block: {
  1345. const parent = node.parent;
  1346. return parent.kind !== ts9__default.default.SyntaxKind.CatchClause && // blocks inside SourceFile are block scope boundaries
  1347. (parent.kind === ts9__default.default.SyntaxKind.SourceFile || // blocks that are direct children of a function scope boundary are no scope boundary
  1348. // for example the FunctionBlock is part of the function scope of the containing function
  1349. !isFunctionScopeBoundary(parent)) ? 2 /* Block */ : 0 /* None */;
  1350. }
  1351. case ts9__default.default.SyntaxKind.CaseBlock:
  1352. case ts9__default.default.SyntaxKind.CatchClause:
  1353. case ts9__default.default.SyntaxKind.ForInStatement:
  1354. case ts9__default.default.SyntaxKind.ForOfStatement:
  1355. case ts9__default.default.SyntaxKind.ForStatement:
  1356. case ts9__default.default.SyntaxKind.WithStatement:
  1357. return 2 /* Block */;
  1358. default:
  1359. return 0 /* None */;
  1360. }
  1361. }
  1362. // src/usage/scopes.ts
  1363. var AbstractScope = class {
  1364. constructor(global) {
  1365. this.global = global;
  1366. }
  1367. namespaceScopes = void 0;
  1368. uses = [];
  1369. variables = /* @__PURE__ */ new Map();
  1370. #enumScopes = void 0;
  1371. addUse(use) {
  1372. this.uses.push(use);
  1373. }
  1374. addVariable(identifier, name, selector, exported, domain) {
  1375. const variables = this.getDestinationScope(selector).getVariables();
  1376. const declaration = {
  1377. declaration: name,
  1378. domain,
  1379. exported
  1380. };
  1381. const variable = variables.get(identifier);
  1382. if (variable === void 0) {
  1383. variables.set(identifier, {
  1384. declarations: [declaration],
  1385. domain,
  1386. uses: []
  1387. });
  1388. } else {
  1389. variable.domain |= domain;
  1390. variable.declarations.push(declaration);
  1391. }
  1392. }
  1393. // eslint-disable-next-line @typescript-eslint/no-unused-vars
  1394. createOrReuseEnumScope(name, _exported) {
  1395. let scope;
  1396. if (this.#enumScopes === void 0) {
  1397. this.#enumScopes = /* @__PURE__ */ new Map();
  1398. } else {
  1399. scope = this.#enumScopes.get(name);
  1400. }
  1401. if (scope === void 0) {
  1402. scope = new EnumScope(this);
  1403. this.#enumScopes.set(name, scope);
  1404. }
  1405. return scope;
  1406. }
  1407. // only relevant for the root scope
  1408. createOrReuseNamespaceScope(name, _exported, ambient, hasExportStatement) {
  1409. let scope;
  1410. if (this.namespaceScopes === void 0) {
  1411. this.namespaceScopes = /* @__PURE__ */ new Map();
  1412. } else {
  1413. scope = this.namespaceScopes.get(name);
  1414. }
  1415. if (scope === void 0) {
  1416. scope = new NamespaceScope(ambient, hasExportStatement, this);
  1417. this.namespaceScopes.set(name, scope);
  1418. } else {
  1419. scope.refresh(ambient, hasExportStatement);
  1420. }
  1421. return scope;
  1422. }
  1423. end(cb) {
  1424. if (this.namespaceScopes !== void 0) {
  1425. this.namespaceScopes.forEach((value) => value.finish(cb));
  1426. }
  1427. this.namespaceScopes = this.#enumScopes = void 0;
  1428. this.applyUses();
  1429. this.variables.forEach((variable) => {
  1430. for (const declaration of variable.declarations) {
  1431. const result = {
  1432. declarations: [],
  1433. domain: declaration.domain,
  1434. exported: declaration.exported,
  1435. inGlobalScope: this.global,
  1436. uses: []
  1437. };
  1438. for (const other of variable.declarations) {
  1439. if (other.domain & declaration.domain) {
  1440. result.declarations.push(other.declaration);
  1441. }
  1442. }
  1443. for (const use of variable.uses) {
  1444. if (use.domain & declaration.domain) {
  1445. result.uses.push(use);
  1446. }
  1447. }
  1448. cb(result, declaration.declaration, this);
  1449. }
  1450. });
  1451. }
  1452. getFunctionScope() {
  1453. return this;
  1454. }
  1455. getVariables() {
  1456. return this.variables;
  1457. }
  1458. // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars
  1459. markExported(_name) {
  1460. }
  1461. // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars
  1462. addUseToParent(_use) {
  1463. }
  1464. applyUse(use, variables = this.variables) {
  1465. const variable = variables.get(use.location.text);
  1466. if (variable === void 0 || (variable.domain & use.domain) === 0) {
  1467. return false;
  1468. }
  1469. variable.uses.push(use);
  1470. return true;
  1471. }
  1472. applyUses() {
  1473. for (const use of this.uses) {
  1474. if (!this.applyUse(use)) {
  1475. this.addUseToParent(use);
  1476. }
  1477. }
  1478. this.uses = [];
  1479. }
  1480. };
  1481. var NonRootScope = class extends AbstractScope {
  1482. constructor(parent, boundary) {
  1483. super(false);
  1484. this.parent = parent;
  1485. this.boundary = boundary;
  1486. }
  1487. getDestinationScope(selector) {
  1488. return this.boundary & selector ? this : this.parent.getDestinationScope(selector);
  1489. }
  1490. addUseToParent(use) {
  1491. return this.parent.addUse(use, this);
  1492. }
  1493. };
  1494. var AbstractNamedExpressionScope = class extends NonRootScope {
  1495. #domain;
  1496. #name;
  1497. constructor(name, domain, parent) {
  1498. super(parent, 1 /* Function */);
  1499. this.#name = name;
  1500. this.#domain = domain;
  1501. }
  1502. addUse(use, source) {
  1503. if (source !== this.innerScope) {
  1504. return this.innerScope.addUse(use);
  1505. }
  1506. if (use.domain & this.#domain && use.location.text === this.#name.text) {
  1507. this.uses.push(use);
  1508. } else {
  1509. return this.parent.addUse(use, this);
  1510. }
  1511. }
  1512. end(cb) {
  1513. this.innerScope.end(cb);
  1514. return cb(
  1515. {
  1516. declarations: [this.#name],
  1517. domain: this.#domain,
  1518. exported: false,
  1519. inGlobalScope: false,
  1520. uses: this.uses
  1521. },
  1522. this.#name,
  1523. this
  1524. );
  1525. }
  1526. getDestinationScope() {
  1527. return this.innerScope;
  1528. }
  1529. getFunctionScope() {
  1530. return this.innerScope;
  1531. }
  1532. };
  1533. var BlockScope = class extends NonRootScope {
  1534. #functionScope;
  1535. constructor(functionScope, parent) {
  1536. super(parent, 2 /* Block */);
  1537. this.#functionScope = functionScope;
  1538. }
  1539. getFunctionScope() {
  1540. return this.#functionScope;
  1541. }
  1542. };
  1543. var ClassExpressionScope = class extends AbstractNamedExpressionScope {
  1544. innerScope = new NonRootScope(this, 1 /* Function */);
  1545. constructor(name, parent) {
  1546. super(name, 4 /* Value */ | 2 /* Type */, parent);
  1547. }
  1548. };
  1549. var ConditionalTypeScope = class extends NonRootScope {
  1550. #state = 0 /* Initial */;
  1551. constructor(parent) {
  1552. super(parent, 8 /* ConditionalType */);
  1553. }
  1554. addUse(use) {
  1555. if (this.#state === 2 /* TrueType */) {
  1556. return void this.uses.push(use);
  1557. }
  1558. return this.parent.addUse(use, this);
  1559. }
  1560. updateState(newState) {
  1561. this.#state = newState;
  1562. }
  1563. };
  1564. var EnumScope = class extends NonRootScope {
  1565. constructor(parent) {
  1566. super(parent, 1 /* Function */);
  1567. }
  1568. end() {
  1569. this.applyUses();
  1570. }
  1571. };
  1572. var FunctionScope = class extends NonRootScope {
  1573. constructor(parent) {
  1574. super(parent, 1 /* Function */);
  1575. }
  1576. beginBody() {
  1577. this.applyUses();
  1578. }
  1579. };
  1580. var FunctionExpressionScope = class extends AbstractNamedExpressionScope {
  1581. innerScope = new FunctionScope(this);
  1582. constructor(name, parent) {
  1583. super(name, 4 /* Value */, parent);
  1584. }
  1585. beginBody() {
  1586. return this.innerScope.beginBody();
  1587. }
  1588. };
  1589. var NamespaceScope = class extends NonRootScope {
  1590. #ambient;
  1591. #exports = void 0;
  1592. #hasExport;
  1593. #innerScope = new NonRootScope(this, 1 /* Function */);
  1594. constructor(ambient, hasExport, parent) {
  1595. super(parent, 1 /* Function */);
  1596. this.#ambient = ambient;
  1597. this.#hasExport = hasExport;
  1598. }
  1599. addUse(use, source) {
  1600. if (source !== this.#innerScope) {
  1601. return this.#innerScope.addUse(use);
  1602. }
  1603. this.uses.push(use);
  1604. }
  1605. createOrReuseEnumScope(name, exported) {
  1606. if (!exported && (!this.#ambient || this.#hasExport)) {
  1607. return this.#innerScope.createOrReuseEnumScope(name, exported);
  1608. }
  1609. return super.createOrReuseEnumScope(name, exported);
  1610. }
  1611. createOrReuseNamespaceScope(name, exported, ambient, hasExportStatement) {
  1612. if (!exported && (!this.#ambient || this.#hasExport)) {
  1613. return this.#innerScope.createOrReuseNamespaceScope(
  1614. name,
  1615. exported,
  1616. ambient || this.#ambient,
  1617. hasExportStatement
  1618. );
  1619. }
  1620. return super.createOrReuseNamespaceScope(
  1621. name,
  1622. exported,
  1623. ambient || this.#ambient,
  1624. hasExportStatement
  1625. );
  1626. }
  1627. end(cb) {
  1628. this.#innerScope.end((variable, key, scope) => {
  1629. if (scope !== this.#innerScope || !variable.exported && (!this.#ambient || this.#exports !== void 0 && !this.#exports.has(key.text))) {
  1630. return cb(variable, key, scope);
  1631. }
  1632. const namespaceVar = this.variables.get(key.text);
  1633. if (namespaceVar === void 0) {
  1634. this.variables.set(key.text, {
  1635. declarations: variable.declarations.map(mapDeclaration),
  1636. domain: variable.domain,
  1637. uses: [...variable.uses]
  1638. });
  1639. } else {
  1640. outer: for (const declaration of variable.declarations) {
  1641. for (const existing of namespaceVar.declarations) {
  1642. if (existing.declaration === declaration) {
  1643. continue outer;
  1644. }
  1645. namespaceVar.declarations.push(mapDeclaration(declaration));
  1646. }
  1647. }
  1648. namespaceVar.domain |= variable.domain;
  1649. for (const use of variable.uses) {
  1650. if (namespaceVar.uses.includes(use)) {
  1651. continue;
  1652. }
  1653. namespaceVar.uses.push(use);
  1654. }
  1655. }
  1656. });
  1657. this.applyUses();
  1658. this.#innerScope = new NonRootScope(this, 1 /* Function */);
  1659. }
  1660. finish(cb) {
  1661. return super.end(cb);
  1662. }
  1663. getDestinationScope() {
  1664. return this.#innerScope;
  1665. }
  1666. markExported(name) {
  1667. if (this.#exports === void 0) {
  1668. this.#exports = /* @__PURE__ */ new Set();
  1669. }
  1670. this.#exports.add(name.text);
  1671. }
  1672. refresh(ambient, hasExport) {
  1673. this.#ambient = ambient;
  1674. this.#hasExport = hasExport;
  1675. }
  1676. };
  1677. var RootScope = class extends AbstractScope {
  1678. #exportAll;
  1679. #exports = void 0;
  1680. #innerScope = new NonRootScope(this, 1 /* Function */);
  1681. constructor(exportAll, global) {
  1682. super(global);
  1683. this.#exportAll = exportAll;
  1684. }
  1685. addUse(use, origin) {
  1686. if (origin === this.#innerScope) {
  1687. return super.addUse(use);
  1688. }
  1689. return this.#innerScope.addUse(use);
  1690. }
  1691. addVariable(identifier, name, selector, exported, domain) {
  1692. if (domain & 8 /* Import */) {
  1693. return super.addVariable(identifier, name, selector, exported, domain);
  1694. }
  1695. return this.#innerScope.addVariable(
  1696. identifier,
  1697. name,
  1698. selector,
  1699. exported,
  1700. domain
  1701. );
  1702. }
  1703. end(cb) {
  1704. this.#innerScope.end((value, key) => {
  1705. value.exported ||= this.#exportAll || this.#exports !== void 0 && this.#exports.includes(key.text);
  1706. value.inGlobalScope = this.global;
  1707. return cb(value, key, this);
  1708. });
  1709. return super.end((value, key, scope) => {
  1710. value.exported ||= scope === this && this.#exports !== void 0 && this.#exports.includes(key.text);
  1711. return cb(value, key, scope);
  1712. });
  1713. }
  1714. getDestinationScope() {
  1715. return this;
  1716. }
  1717. markExported(id) {
  1718. if (this.#exports === void 0) {
  1719. this.#exports = [id.text];
  1720. } else {
  1721. this.#exports.push(id.text);
  1722. }
  1723. }
  1724. };
  1725. function mapDeclaration(declaration) {
  1726. return {
  1727. declaration,
  1728. domain: getDeclarationDomain(declaration),
  1729. exported: true
  1730. };
  1731. }
  1732. // src/usage/UsageWalker.ts
  1733. var UsageWalker = class {
  1734. #result = /* @__PURE__ */ new Map();
  1735. #scope;
  1736. getUsage(sourceFile) {
  1737. const variableCallback = (variable, key) => {
  1738. this.#result.set(key, variable);
  1739. };
  1740. const isModule = ts9__default.default.isExternalModule(sourceFile);
  1741. this.#scope = new RootScope(
  1742. sourceFile.isDeclarationFile && isModule && !containsExportStatement(sourceFile),
  1743. !isModule
  1744. );
  1745. const cb = (node) => {
  1746. if (isBlockScopeBoundary(node)) {
  1747. return continueWithScope(
  1748. node,
  1749. new BlockScope(this.#scope.getFunctionScope(), this.#scope),
  1750. handleBlockScope
  1751. );
  1752. }
  1753. switch (node.kind) {
  1754. case ts9__default.default.SyntaxKind.ArrowFunction:
  1755. case ts9__default.default.SyntaxKind.CallSignature:
  1756. case ts9__default.default.SyntaxKind.Constructor:
  1757. case ts9__default.default.SyntaxKind.ConstructorType:
  1758. case ts9__default.default.SyntaxKind.ConstructSignature:
  1759. case ts9__default.default.SyntaxKind.FunctionDeclaration:
  1760. case ts9__default.default.SyntaxKind.FunctionExpression:
  1761. case ts9__default.default.SyntaxKind.FunctionType:
  1762. case ts9__default.default.SyntaxKind.GetAccessor:
  1763. case ts9__default.default.SyntaxKind.MethodDeclaration:
  1764. case ts9__default.default.SyntaxKind.MethodSignature:
  1765. case ts9__default.default.SyntaxKind.SetAccessor:
  1766. return this.#handleFunctionLikeDeclaration(
  1767. node,
  1768. cb,
  1769. variableCallback
  1770. );
  1771. case ts9__default.default.SyntaxKind.ClassDeclaration:
  1772. this.#handleDeclaration(
  1773. node,
  1774. true,
  1775. 4 /* Value */ | 2 /* Type */
  1776. );
  1777. return continueWithScope(
  1778. node,
  1779. new NonRootScope(this.#scope, 1 /* Function */)
  1780. );
  1781. case ts9__default.default.SyntaxKind.ClassExpression:
  1782. return continueWithScope(
  1783. node,
  1784. node.name !== void 0 ? new ClassExpressionScope(
  1785. node.name,
  1786. this.#scope
  1787. ) : new NonRootScope(this.#scope, 1 /* Function */)
  1788. );
  1789. case ts9__default.default.SyntaxKind.ConditionalType:
  1790. return this.#handleConditionalType(
  1791. node,
  1792. cb,
  1793. variableCallback
  1794. );
  1795. case ts9__default.default.SyntaxKind.EnumDeclaration:
  1796. this.#handleDeclaration(
  1797. node,
  1798. true,
  1799. 7 /* Any */
  1800. );
  1801. return continueWithScope(
  1802. node,
  1803. this.#scope.createOrReuseEnumScope(
  1804. node.name.text,
  1805. includesModifier(
  1806. node.modifiers,
  1807. ts9__default.default.SyntaxKind.ExportKeyword
  1808. )
  1809. )
  1810. );
  1811. case ts9__default.default.SyntaxKind.EnumMember:
  1812. this.#scope.addVariable(
  1813. getPropertyName(node.name),
  1814. node.name,
  1815. 1 /* Function */,
  1816. true,
  1817. 4 /* Value */
  1818. );
  1819. break;
  1820. case ts9__default.default.SyntaxKind.ExportAssignment:
  1821. if (node.expression.kind === ts9__default.default.SyntaxKind.Identifier) {
  1822. return this.#scope.markExported(
  1823. node.expression
  1824. );
  1825. }
  1826. break;
  1827. case ts9__default.default.SyntaxKind.ExportSpecifier:
  1828. if (node.propertyName !== void 0) {
  1829. return this.#scope.markExported(
  1830. node.propertyName,
  1831. node.name
  1832. );
  1833. }
  1834. return this.#scope.markExported(node.name);
  1835. case ts9__default.default.SyntaxKind.Identifier: {
  1836. const domain = getUsageDomain(node);
  1837. if (domain !== void 0) {
  1838. this.#scope.addUse({ domain, location: node });
  1839. }
  1840. return;
  1841. }
  1842. case ts9__default.default.SyntaxKind.ImportClause:
  1843. case ts9__default.default.SyntaxKind.ImportEqualsDeclaration:
  1844. case ts9__default.default.SyntaxKind.ImportSpecifier:
  1845. case ts9__default.default.SyntaxKind.NamespaceImport:
  1846. this.#handleDeclaration(
  1847. node,
  1848. false,
  1849. 7 /* Any */ | 8 /* Import */
  1850. );
  1851. break;
  1852. case ts9__default.default.SyntaxKind.InterfaceDeclaration:
  1853. case ts9__default.default.SyntaxKind.TypeAliasDeclaration:
  1854. this.#handleDeclaration(
  1855. node,
  1856. true,
  1857. 2 /* Type */
  1858. );
  1859. return continueWithScope(
  1860. node,
  1861. new NonRootScope(this.#scope, 4 /* Type */)
  1862. );
  1863. case ts9__default.default.SyntaxKind.MappedType:
  1864. return continueWithScope(
  1865. node,
  1866. new NonRootScope(this.#scope, 4 /* Type */)
  1867. );
  1868. case ts9__default.default.SyntaxKind.ModuleDeclaration:
  1869. return this.#handleModule(
  1870. node,
  1871. continueWithScope
  1872. );
  1873. case ts9__default.default.SyntaxKind.Parameter:
  1874. if (node.parent.kind !== ts9__default.default.SyntaxKind.IndexSignature && (node.name.kind !== ts9__default.default.SyntaxKind.Identifier || identifierToKeywordKind(
  1875. node.name
  1876. ) !== ts9__default.default.SyntaxKind.ThisKeyword)) {
  1877. this.#handleBindingName(
  1878. node.name,
  1879. false,
  1880. false
  1881. );
  1882. }
  1883. break;
  1884. case ts9__default.default.SyntaxKind.TypeParameter:
  1885. this.#scope.addVariable(
  1886. node.name.text,
  1887. node.name,
  1888. node.parent.kind === ts9__default.default.SyntaxKind.InferType ? 8 /* InferType */ : 7 /* Type */,
  1889. false,
  1890. 2 /* Type */
  1891. );
  1892. break;
  1893. // End of Scope specific handling
  1894. case ts9__default.default.SyntaxKind.VariableDeclarationList:
  1895. this.#handleVariableDeclaration(node);
  1896. break;
  1897. }
  1898. return ts9__default.default.forEachChild(node, cb);
  1899. };
  1900. const continueWithScope = (node, scope, next = forEachChild) => {
  1901. const savedScope = this.#scope;
  1902. this.#scope = scope;
  1903. next(node);
  1904. this.#scope.end(variableCallback);
  1905. this.#scope = savedScope;
  1906. };
  1907. const handleBlockScope = (node) => {
  1908. if (node.kind === ts9__default.default.SyntaxKind.CatchClause && node.variableDeclaration !== void 0) {
  1909. this.#handleBindingName(
  1910. node.variableDeclaration.name,
  1911. true,
  1912. false
  1913. );
  1914. }
  1915. return ts9__default.default.forEachChild(node, cb);
  1916. };
  1917. ts9__default.default.forEachChild(sourceFile, cb);
  1918. this.#scope.end(variableCallback);
  1919. return this.#result;
  1920. function forEachChild(node) {
  1921. return ts9__default.default.forEachChild(node, cb);
  1922. }
  1923. }
  1924. #handleBindingName(name, blockScoped, exported) {
  1925. if (name.kind === ts9__default.default.SyntaxKind.Identifier) {
  1926. return this.#scope.addVariable(
  1927. name.text,
  1928. name,
  1929. blockScoped ? 3 /* Block */ : 1 /* Function */,
  1930. exported,
  1931. 4 /* Value */
  1932. );
  1933. }
  1934. forEachDestructuringIdentifier(name, (declaration) => {
  1935. this.#scope.addVariable(
  1936. declaration.name.text,
  1937. declaration.name,
  1938. blockScoped ? 3 /* Block */ : 1 /* Function */,
  1939. exported,
  1940. 4 /* Value */
  1941. );
  1942. });
  1943. }
  1944. #handleConditionalType(node, cb, varCb) {
  1945. const savedScope = this.#scope;
  1946. const scope = this.#scope = new ConditionalTypeScope(savedScope);
  1947. cb(node.checkType);
  1948. scope.updateState(1 /* Extends */);
  1949. cb(node.extendsType);
  1950. scope.updateState(2 /* TrueType */);
  1951. cb(node.trueType);
  1952. scope.updateState(3 /* FalseType */);
  1953. cb(node.falseType);
  1954. scope.end(varCb);
  1955. this.#scope = savedScope;
  1956. }
  1957. #handleDeclaration(node, blockScoped, domain) {
  1958. if (node.name !== void 0) {
  1959. this.#scope.addVariable(
  1960. node.name.text,
  1961. node.name,
  1962. blockScoped ? 3 /* Block */ : 1 /* Function */,
  1963. includesModifier(
  1964. node.modifiers,
  1965. ts9__default.default.SyntaxKind.ExportKeyword
  1966. ),
  1967. domain
  1968. );
  1969. }
  1970. }
  1971. #handleFunctionLikeDeclaration(node, cb, varCb) {
  1972. if (ts9__default.default.canHaveDecorators(node)) {
  1973. ts9__default.default.getDecorators(node)?.forEach(cb);
  1974. }
  1975. const savedScope = this.#scope;
  1976. if (node.kind === ts9__default.default.SyntaxKind.FunctionDeclaration) {
  1977. this.#handleDeclaration(node, false, 4 /* Value */);
  1978. }
  1979. const scope = this.#scope = node.kind === ts9__default.default.SyntaxKind.FunctionExpression && node.name !== void 0 ? new FunctionExpressionScope(node.name, savedScope) : new FunctionScope(savedScope);
  1980. if (node.name !== void 0) {
  1981. cb(node.name);
  1982. }
  1983. if (node.typeParameters !== void 0) {
  1984. node.typeParameters.forEach(cb);
  1985. }
  1986. node.parameters.forEach(cb);
  1987. if (node.type !== void 0) {
  1988. cb(node.type);
  1989. }
  1990. if (node.body !== void 0) {
  1991. scope.beginBody();
  1992. cb(node.body);
  1993. }
  1994. scope.end(varCb);
  1995. this.#scope = savedScope;
  1996. }
  1997. #handleModule(node, next) {
  1998. if (node.flags & ts9__default.default.NodeFlags.GlobalAugmentation) {
  1999. return next(
  2000. node,
  2001. this.#scope.createOrReuseNamespaceScope("-global", false, true, false)
  2002. );
  2003. }
  2004. if (node.name.kind === ts9__default.default.SyntaxKind.Identifier) {
  2005. const exported = isNamespaceExported(node);
  2006. this.#scope.addVariable(
  2007. node.name.text,
  2008. node.name,
  2009. 1 /* Function */,
  2010. exported,
  2011. 1 /* Namespace */ | 4 /* Value */
  2012. );
  2013. const ambient = includesModifier(
  2014. node.modifiers,
  2015. ts9__default.default.SyntaxKind.DeclareKeyword
  2016. );
  2017. return next(
  2018. node,
  2019. this.#scope.createOrReuseNamespaceScope(
  2020. node.name.text,
  2021. exported,
  2022. ambient,
  2023. ambient && namespaceHasExportStatement(node)
  2024. )
  2025. );
  2026. }
  2027. return next(
  2028. node,
  2029. this.#scope.createOrReuseNamespaceScope(
  2030. `"${node.name.text}"`,
  2031. false,
  2032. true,
  2033. namespaceHasExportStatement(node)
  2034. )
  2035. );
  2036. }
  2037. #handleVariableDeclaration(declarationList) {
  2038. const blockScoped = isBlockScopedVariableDeclarationList(declarationList);
  2039. const exported = declarationList.parent.kind === ts9__default.default.SyntaxKind.VariableStatement && includesModifier(
  2040. declarationList.parent.modifiers,
  2041. ts9__default.default.SyntaxKind.ExportKeyword
  2042. );
  2043. for (const declaration of declarationList.declarations) {
  2044. this.#handleBindingName(declaration.name, blockScoped, exported);
  2045. }
  2046. }
  2047. };
  2048. function containsExportStatement(block) {
  2049. for (const statement of block.statements) {
  2050. if (statement.kind === ts9__default.default.SyntaxKind.ExportDeclaration || statement.kind === ts9__default.default.SyntaxKind.ExportAssignment) {
  2051. return true;
  2052. }
  2053. }
  2054. return false;
  2055. }
  2056. function forEachDestructuringIdentifier(pattern, fn) {
  2057. for (const element of pattern.elements) {
  2058. if (element.kind !== ts9__default.default.SyntaxKind.BindingElement) {
  2059. continue;
  2060. }
  2061. let result;
  2062. if (element.name.kind === ts9__default.default.SyntaxKind.Identifier) {
  2063. result = fn(element);
  2064. } else {
  2065. result = forEachDestructuringIdentifier(element.name, fn);
  2066. }
  2067. if (result) {
  2068. return result;
  2069. }
  2070. }
  2071. }
  2072. function isBlockScopedVariableDeclarationList(declarationList) {
  2073. return (declarationList.flags & ts9__default.default.NodeFlags.BlockScoped) !== 0;
  2074. }
  2075. function isNamespaceExported(node) {
  2076. return node.parent.kind === ts9__default.default.SyntaxKind.ModuleDeclaration || includesModifier(node.modifiers, ts9__default.default.SyntaxKind.ExportKeyword);
  2077. }
  2078. function namespaceHasExportStatement(ns) {
  2079. if (ns.body === void 0 || ns.body.kind !== ts9__default.default.SyntaxKind.ModuleBlock) {
  2080. return false;
  2081. }
  2082. return containsExportStatement(ns.body);
  2083. }
  2084. // src/usage/collectVariableUsage.ts
  2085. function collectVariableUsage(sourceFile) {
  2086. return new UsageWalker().getUsage(sourceFile);
  2087. }
  2088. exports.AccessKind = AccessKind;
  2089. exports.DeclarationDomain = DeclarationDomain;
  2090. exports.UsageDomain = UsageDomain;
  2091. exports.collectVariableUsage = collectVariableUsage;
  2092. exports.forEachComment = forEachComment;
  2093. exports.forEachToken = forEachToken;
  2094. exports.getAccessKind = getAccessKind;
  2095. exports.getCallSignaturesOfType = getCallSignaturesOfType;
  2096. exports.getPropertyOfType = getPropertyOfType;
  2097. exports.getWellKnownSymbolPropertyOfType = getWellKnownSymbolPropertyOfType;
  2098. exports.hasDecorators = hasDecorators;
  2099. exports.hasExpressionInitializer = hasExpressionInitializer;
  2100. exports.hasInitializer = hasInitializer;
  2101. exports.hasJSDoc = hasJSDoc;
  2102. exports.hasModifiers = hasModifiers;
  2103. exports.hasType = hasType;
  2104. exports.hasTypeArguments = hasTypeArguments;
  2105. exports.includesModifier = includesModifier;
  2106. exports.intersectionConstituents = intersectionConstituents;
  2107. exports.intersectionTypeParts = intersectionTypeParts;
  2108. exports.isAbstractKeyword = isAbstractKeyword;
  2109. exports.isAccessExpression = isAccessExpression;
  2110. exports.isAccessibilityModifier = isAccessibilityModifier;
  2111. exports.isAccessorDeclaration = isAccessorDeclaration;
  2112. exports.isAccessorKeyword = isAccessorKeyword;
  2113. exports.isAnyKeyword = isAnyKeyword;
  2114. exports.isArrayBindingElement = isArrayBindingElement;
  2115. exports.isArrayBindingOrAssignmentPattern = isArrayBindingOrAssignmentPattern;
  2116. exports.isAssertKeyword = isAssertKeyword;
  2117. exports.isAssertsKeyword = isAssertsKeyword;
  2118. exports.isAssignmentKind = isAssignmentKind;
  2119. exports.isAssignmentPattern = isAssignmentPattern;
  2120. exports.isAsyncKeyword = isAsyncKeyword;
  2121. exports.isAwaitKeyword = isAwaitKeyword;
  2122. exports.isBigIntKeyword = isBigIntKeyword;
  2123. exports.isBigIntLiteralType = isBigIntLiteralType;
  2124. exports.isBindingOrAssignmentElementRestIndicator = isBindingOrAssignmentElementRestIndicator;
  2125. exports.isBindingOrAssignmentElementTarget = isBindingOrAssignmentElementTarget;
  2126. exports.isBindingOrAssignmentPattern = isBindingOrAssignmentPattern;
  2127. exports.isBindingPattern = isBindingPattern;
  2128. exports.isBlockLike = isBlockLike;
  2129. exports.isBooleanKeyword = isBooleanKeyword;
  2130. exports.isBooleanLiteral = isBooleanLiteral;
  2131. exports.isBooleanLiteralType = isBooleanLiteralType;
  2132. exports.isClassLikeDeclaration = isClassLikeDeclaration;
  2133. exports.isClassMemberModifier = isClassMemberModifier;
  2134. exports.isColonToken = isColonToken;
  2135. exports.isCompilerOptionEnabled = isCompilerOptionEnabled;
  2136. exports.isConditionalType = isConditionalType;
  2137. exports.isConstAssertionExpression = isConstAssertionExpression;
  2138. exports.isConstKeyword = isConstKeyword;
  2139. exports.isDeclarationName = isDeclarationName;
  2140. exports.isDeclarationWithTypeParameterChildren = isDeclarationWithTypeParameterChildren;
  2141. exports.isDeclarationWithTypeParameters = isDeclarationWithTypeParameters;
  2142. exports.isDeclareKeyword = isDeclareKeyword;
  2143. exports.isDefaultKeyword = isDefaultKeyword;
  2144. exports.isDestructuringPattern = isDestructuringPattern;
  2145. exports.isDotToken = isDotToken;
  2146. exports.isEndOfFileToken = isEndOfFileToken;
  2147. exports.isEntityNameExpression = isEntityNameExpression;
  2148. exports.isEntityNameOrEntityNameExpression = isEntityNameOrEntityNameExpression;
  2149. exports.isEnumType = isEnumType;
  2150. exports.isEqualsGreaterThanToken = isEqualsGreaterThanToken;
  2151. exports.isEqualsToken = isEqualsToken;
  2152. exports.isEvolvingArrayType = isEvolvingArrayType;
  2153. exports.isExclamationToken = isExclamationToken;
  2154. exports.isExportKeyword = isExportKeyword;
  2155. exports.isFalseKeyword = isFalseKeyword;
  2156. exports.isFalseLiteral = isFalseLiteral;
  2157. exports.isFalseLiteralType = isFalseLiteralType;
  2158. exports.isFalsyType = isFalsyType;
  2159. exports.isForInOrOfStatement = isForInOrOfStatement;
  2160. exports.isFreshableIntrinsicType = isFreshableIntrinsicType;
  2161. exports.isFreshableType = isFreshableType;
  2162. exports.isFunctionLikeDeclaration = isFunctionLikeDeclaration;
  2163. exports.isFunctionScopeBoundary = isFunctionScopeBoundary;
  2164. exports.isImportExpression = isImportExpression;
  2165. exports.isImportKeyword = isImportKeyword;
  2166. exports.isInKeyword = isInKeyword;
  2167. exports.isIndexType = isIndexType;
  2168. exports.isIndexedAccessType = isIndexedAccessType;
  2169. exports.isInstantiableType = isInstantiableType;
  2170. exports.isIntersectionType = isIntersectionType;
  2171. exports.isIntrinsicAnyType = isIntrinsicAnyType;
  2172. exports.isIntrinsicBigIntType = isIntrinsicBigIntType;
  2173. exports.isIntrinsicBooleanType = isIntrinsicBooleanType;
  2174. exports.isIntrinsicESSymbolType = isIntrinsicESSymbolType;
  2175. exports.isIntrinsicErrorType = isIntrinsicErrorType;
  2176. exports.isIntrinsicNeverType = isIntrinsicNeverType;
  2177. exports.isIntrinsicNonPrimitiveType = isIntrinsicNonPrimitiveType;
  2178. exports.isIntrinsicNullType = isIntrinsicNullType;
  2179. exports.isIntrinsicNumberType = isIntrinsicNumberType;
  2180. exports.isIntrinsicStringType = isIntrinsicStringType;
  2181. exports.isIntrinsicType = isIntrinsicType;
  2182. exports.isIntrinsicUndefinedType = isIntrinsicUndefinedType;
  2183. exports.isIntrinsicUnknownType = isIntrinsicUnknownType;
  2184. exports.isIntrinsicVoidType = isIntrinsicVoidType;
  2185. exports.isIterationStatement = isIterationStatement;
  2186. exports.isJSDocComment = isJSDocComment;
  2187. exports.isJSDocNamespaceBody = isJSDocNamespaceBody;
  2188. exports.isJSDocNamespaceDeclaration = isJSDocNamespaceDeclaration;
  2189. exports.isJSDocText = isJSDocText;
  2190. exports.isJSDocTypeReferencingNode = isJSDocTypeReferencingNode;
  2191. exports.isJsonMinusNumericLiteral = isJsonMinusNumericLiteral;
  2192. exports.isJsonObjectExpression = isJsonObjectExpression;
  2193. exports.isJsxAttributeLike = isJsxAttributeLike;
  2194. exports.isJsxAttributeValue = isJsxAttributeValue;
  2195. exports.isJsxChild = isJsxChild;
  2196. exports.isJsxTagNameExpression = isJsxTagNameExpression;
  2197. exports.isJsxTagNamePropertyAccess = isJsxTagNamePropertyAccess;
  2198. exports.isLiteralToken = isLiteralToken;
  2199. exports.isLiteralType = isLiteralType;
  2200. exports.isModifierFlagSet = isModifierFlagSet;
  2201. exports.isModuleBody = isModuleBody;
  2202. exports.isModuleName = isModuleName;
  2203. exports.isModuleReference = isModuleReference;
  2204. exports.isNamedDeclarationWithName = isNamedDeclarationWithName;
  2205. exports.isNamedImportBindings = isNamedImportBindings;
  2206. exports.isNamedImportsOrExports = isNamedImportsOrExports;
  2207. exports.isNamespaceBody = isNamespaceBody;
  2208. exports.isNamespaceDeclaration = isNamespaceDeclaration;
  2209. exports.isNeverKeyword = isNeverKeyword;
  2210. exports.isNodeFlagSet = isNodeFlagSet;
  2211. exports.isNullKeyword = isNullKeyword;
  2212. exports.isNullLiteral = isNullLiteral;
  2213. exports.isNumberKeyword = isNumberKeyword;
  2214. exports.isNumberLiteralType = isNumberLiteralType;
  2215. exports.isNumericOrStringLikeLiteral = isNumericOrStringLikeLiteral;
  2216. exports.isNumericPropertyName = isNumericPropertyName;
  2217. exports.isObjectBindingOrAssignmentElement = isObjectBindingOrAssignmentElement;
  2218. exports.isObjectBindingOrAssignmentPattern = isObjectBindingOrAssignmentPattern;
  2219. exports.isObjectFlagSet = isObjectFlagSet;
  2220. exports.isObjectKeyword = isObjectKeyword;
  2221. exports.isObjectType = isObjectType;
  2222. exports.isObjectTypeDeclaration = isObjectTypeDeclaration;
  2223. exports.isOutKeyword = isOutKeyword;
  2224. exports.isOverrideKeyword = isOverrideKeyword;
  2225. exports.isParameterPropertyModifier = isParameterPropertyModifier;
  2226. exports.isPrivateKeyword = isPrivateKeyword;
  2227. exports.isPropertyAccessEntityNameExpression = isPropertyAccessEntityNameExpression;
  2228. exports.isPropertyNameLiteral = isPropertyNameLiteral;
  2229. exports.isPropertyReadonlyInType = isPropertyReadonlyInType;
  2230. exports.isProtectedKeyword = isProtectedKeyword;
  2231. exports.isPseudoLiteralToken = isPseudoLiteralToken;
  2232. exports.isPublicKeyword = isPublicKeyword;
  2233. exports.isQuestionDotToken = isQuestionDotToken;
  2234. exports.isQuestionToken = isQuestionToken;
  2235. exports.isReadonlyKeyword = isReadonlyKeyword;
  2236. exports.isSignatureDeclaration = isSignatureDeclaration;
  2237. exports.isStaticKeyword = isStaticKeyword;
  2238. exports.isStrictCompilerOptionEnabled = isStrictCompilerOptionEnabled;
  2239. exports.isStringKeyword = isStringKeyword;
  2240. exports.isStringLiteralType = isStringLiteralType;
  2241. exports.isStringMappingType = isStringMappingType;
  2242. exports.isSubstitutionType = isSubstitutionType;
  2243. exports.isSuperElementAccessExpression = isSuperElementAccessExpression;
  2244. exports.isSuperExpression = isSuperExpression;
  2245. exports.isSuperKeyword = isSuperKeyword;
  2246. exports.isSuperProperty = isSuperProperty;
  2247. exports.isSuperPropertyAccessExpression = isSuperPropertyAccessExpression;
  2248. exports.isSymbolFlagSet = isSymbolFlagSet;
  2249. exports.isSymbolKeyword = isSymbolKeyword;
  2250. exports.isSyntaxList = isSyntaxList;
  2251. exports.isTemplateLiteralType = isTemplateLiteralType;
  2252. exports.isThenableType = isThenableType;
  2253. exports.isThisExpression = isThisExpression;
  2254. exports.isThisKeyword = isThisKeyword;
  2255. exports.isTransientSymbolLinksFlagSet = isTransientSymbolLinksFlagSet;
  2256. exports.isTrueKeyword = isTrueKeyword;
  2257. exports.isTrueLiteral = isTrueLiteral;
  2258. exports.isTrueLiteralType = isTrueLiteralType;
  2259. exports.isTupleType = isTupleType;
  2260. exports.isTupleTypeReference = isTupleTypeReference;
  2261. exports.isTypeFlagSet = isTypeFlagSet;
  2262. exports.isTypeOnlyCompatibleAliasDeclaration = isTypeOnlyCompatibleAliasDeclaration;
  2263. exports.isTypeParameter = isTypeParameter;
  2264. exports.isTypeReference = isTypeReference;
  2265. exports.isTypeReferenceType = isTypeReferenceType;
  2266. exports.isTypeVariable = isTypeVariable;
  2267. exports.isUndefinedKeyword = isUndefinedKeyword;
  2268. exports.isUnionOrIntersectionType = isUnionOrIntersectionType;
  2269. exports.isUnionOrIntersectionTypeNode = isUnionOrIntersectionTypeNode;
  2270. exports.isUnionType = isUnionType;
  2271. exports.isUniqueESSymbolType = isUniqueESSymbolType;
  2272. exports.isUnknownKeyword = isUnknownKeyword;
  2273. exports.isValidPropertyAccess = isValidPropertyAccess;
  2274. exports.isVariableLikeDeclaration = isVariableLikeDeclaration;
  2275. exports.isVoidKeyword = isVoidKeyword;
  2276. exports.iterateComments = iterateComments;
  2277. exports.iterateTokens = iterateTokens;
  2278. exports.symbolHasReadonlyDeclaration = symbolHasReadonlyDeclaration;
  2279. exports.typeConstituents = typeConstituents;
  2280. exports.typeIsLiteral = typeIsLiteral;
  2281. exports.typeParts = typeParts;
  2282. exports.unionConstituents = unionConstituents;
  2283. exports.unionTypeParts = unionTypeParts;