{"version":3,"sources":["../../src/utils/versions.ts"],"sourcesContent":["import type ts from \"typescript\";\n\nimport { ESLintUtils } from \"@typescript-eslint/utils\";\nimport { ReportDescriptor } from \"@typescript-eslint/utils/ts-eslint\";\nimport { getTsconfig } from \"get-tsconfig\";\nimport * as tsModuleOriginal from \"typescript\";\n\nimport { ExpectRuleContext, MessageIds, VersionToTestOption } from \"../meta.js\";\nimport { getProgramForVersion, TSModule } from \"./programs.js\";\n\nexport interface ResolvedVersionToTest {\n\tprogram: ts.Program;\n\tsourceFile: ts.SourceFile;\n\ttsModule: TSModule;\n\tversion?: string;\n}\n\nexport type VersionsResolution =\n\t| VersionsResolutionFailure\n\t| VersionsResolutionSuccess;\n\nexport interface VersionsResolutionFailure {\n\terror: Pick<ReportDescriptor<MessageIds>, \"data\" | \"messageId\">;\n}\n\nexport interface VersionsResolutionSuccess {\n\terror?: never;\n\tversionsToTest: ResolvedVersionToTest[];\n}\n\nexport function resolveVersionsToTest(\n\tcontext: ExpectRuleContext,\n\tfileName: string,\n\tversionsToTest: undefined | VersionToTestOption[],\n): VersionsResolution {\n\tconst { program: originalProgram } = ESLintUtils.getParserServices(context);\n\n\t// ESLintUtils.getParserServices would have thrown if there's no source file.\n\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\tconst originalSourceFile = originalProgram.getSourceFile(fileName)!;\n\n\tif (!versionsToTest) {\n\t\treturn {\n\t\t\tversionsToTest: [\n\t\t\t\t{\n\t\t\t\t\tprogram: originalProgram,\n\t\t\t\t\tsourceFile: originalSourceFile,\n\t\t\t\t\ttsModule: tsModuleOriginal,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t}\n\n\t// ESLintUtils.getParserServices would have thrown if the file isn't included.\n\t// Technically different TS versions might have different resolutions...\n\t// ...but we've yet to see an issue from this in the wild.\n\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\tconst tsconfigPath = getTsconfig(context.filename)!.path;\n\n\tconst resolvedVersions: ResolvedVersionToTest[] = [];\n\tconst seenVersionNames = new Set<string>();\n\n\tfor (const version of versionsToTest) {\n\t\tif (seenVersionNames.has(version.name)) {\n\t\t\treturn {\n\t\t\t\terror: {\n\t\t\t\t\tdata: { name: version.name },\n\t\t\t\t\tmessageId: \"DuplicateTSVersionName\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tseenVersionNames.add(version.name);\n\n\t\tconst tsModule = tryRequireTypeScript(version);\n\t\tif (typeof tsModule === \"string\") {\n\t\t\treturn {\n\t\t\t\terror: {\n\t\t\t\t\tdata: { error: tsModule, ...version },\n\t\t\t\t\tmessageId: \"CouldNotRequireTypeScript\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tconst program = getProgramForVersion(\n\t\t\ttsconfigPath,\n\t\t\ttsModule,\n\t\t\tversion.name,\n\t\t\toriginalProgram,\n\t\t);\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tconst sourceFile = program.getSourceFile(context.filename)!;\n\n\t\tresolvedVersions.push({\n\t\t\tprogram,\n\t\t\tsourceFile,\n\t\t\ttsModule,\n\t\t\tversion: version.name,\n\t\t});\n\t}\n\n\treturn {\n\t\tversionsToTest: resolvedVersions,\n\t};\n}\n\nfunction tryRequireTypeScript(version: VersionToTestOption) {\n\ttry {\n\t\t// eslint-disable-next-line @typescript-eslint/no-require-imports\n\t\treturn require(version.path) as TSModule;\n\t} catch (error) {\n\t\treturn (error as Error).message.split(\"\\n\")[0];\n\t}\n}\n"],"mappings":";AAEA,SAAS,mBAAmB;AAE5B,SAAS,mBAAmB;AAC5B,YAAY,sBAAsB;AAGlC,SAAS,4BAAsC;AAsBxC,SAAS,sBACf,SACA,UACA,gBACqB;AACrB,QAAM,EAAE,SAAS,gBAAgB,IAAI,YAAY,kBAAkB,OAAO;AAI1E,QAAM,qBAAqB,gBAAgB,cAAc,QAAQ;AAEjE,MAAI,CAAC,gBAAgB;AACpB,WAAO;AAAA,MACN,gBAAgB;AAAA,QACf;AAAA,UACC,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,UAAU;AAAA,QACX;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAMA,QAAM,eAAe,YAAY,QAAQ,QAAQ,EAAG;AAEpD,QAAM,mBAA4C,CAAC;AACnD,QAAM,mBAAmB,oBAAI,IAAY;AAEzC,aAAW,WAAW,gBAAgB;AACrC,QAAI,iBAAiB,IAAI,QAAQ,IAAI,GAAG;AACvC,aAAO;AAAA,QACN,OAAO;AAAA,UACN,MAAM,EAAE,MAAM,QAAQ,KAAK;AAAA,UAC3B,WAAW;AAAA,QACZ;AAAA,MACD;AAAA,IACD;AAEA,qBAAiB,IAAI,QAAQ,IAAI;AAEjC,UAAM,WAAW,qBAAqB,OAAO;AAC7C,QAAI,OAAO,aAAa,UAAU;AACjC,aAAO;AAAA,QACN,OAAO;AAAA,UACN,MAAM,EAAE,OAAO,UAAU,GAAG,QAAQ;AAAA,UACpC,WAAW;AAAA,QACZ;AAAA,MACD;AAAA,IACD;AAEA,UAAM,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,IACD;AAGA,UAAM,aAAa,QAAQ,cAAc,QAAQ,QAAQ;AAEzD,qBAAiB,KAAK;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,QAAQ;AAAA,IAClB,CAAC;AAAA,EACF;AAEA,SAAO;AAAA,IACN,gBAAgB;AAAA,EACjB;AACD;AAEA,SAAS,qBAAqB,SAA8B;AAC3D,MAAI;AAEH,WAAO,QAAQ,QAAQ,IAAI;AAAA,EAC5B,SAAS,OAAO;AACf,WAAQ,MAAgB,QAAQ,MAAM,IAAI,EAAE,CAAC;AAAA,EAC9C;AACD;","names":[]}