index.cjs 103 KB

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