{"version":3,"sources":["../../../src/checkers/vueTsc/main.ts"],"sourcesContent":["import { createRequire } from 'node:module'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { parentPort } from 'node:worker_threads'\nimport invariant from 'tiny-invariant'\nimport type ts from 'typescript'\n\nimport { Checker } from '../../Checker.js'\nimport {\n consoleLog,\n diagnosticToRuntimeError,\n diagnosticToTerminalLog,\n ensureCall,\n normalizeVueTscDiagnostic,\n toClientPayload,\n wrapCheckerSummary,\n} from '../../logger.js'\nimport {\n ACTION_TYPES,\n type CreateDiagnostic,\n type DiagnosticToRuntime,\n} from '../../types.js'\nimport { forceNoEmitOnSolutionBuilderHost } from '../tscUtils.js'\nimport { prepareVueTsc } from './prepareVueTsc.js'\n\nconst _require = createRequire(import.meta.url)\nconst __filename = fileURLToPath(import.meta.url)\n\nlet createServeAndBuild: any\n\nconst createDiagnostic: CreateDiagnostic<'vueTsc'> = (pluginConfig) => {\n let overlay = true\n let terminal = true\n let currDiagnostics: DiagnosticToRuntime[] = []\n\n return {\n config: ({ enableOverlay, enableTerminal }) => {\n overlay = enableOverlay\n terminal = enableTerminal\n },\n async configureServer({ root }) {\n invariant(pluginConfig.vueTsc, 'config.vueTsc should be `false`')\n\n const { targetTsDir } = await prepareVueTsc()\n const vueTs = _require(path.resolve(targetTsDir, 'lib/typescript.js'))\n const finalConfig =\n pluginConfig.vueTsc === true\n ? { root, tsconfigPath: 'tsconfig.json' }\n : {\n root: pluginConfig.vueTsc.root ?? root,\n tsconfigPath: pluginConfig.vueTsc.tsconfigPath ?? 'tsconfig.json',\n }\n\n const configFile = vueTs.findConfigFile(\n finalConfig.root,\n vueTs.sys.fileExists,\n finalConfig.tsconfigPath,\n )\n\n if (configFile === undefined) {\n throw Error(\n `Failed to find a valid tsconfig.json: ${finalConfig.tsconfigPath} at ${finalConfig.root} is not a valid tsconfig`,\n )\n }\n\n let logChunk = ''\n let prevLogChunk = ''\n\n // https://github.com/microsoft/TypeScript/blob/a545ab1ac2cb24ff3b1aaf0bfbfb62c499742ac2/src/compiler/watch.ts#L12-L28\n const reportDiagnostic = (diagnostic: ts.Diagnostic) => {\n const normalizedDiagnostic = normalizeVueTscDiagnostic(diagnostic)\n if (normalizedDiagnostic === null) {\n return\n }\n\n currDiagnostics.push(diagnosticToRuntimeError(normalizedDiagnostic))\n logChunk +=\n os.EOL + diagnosticToTerminalLog(normalizedDiagnostic, 'vue-tsc')\n }\n\n const reportWatchStatusChanged: ts.WatchStatusReporter = (\n diagnostic,\n _newLine,\n _options,\n errorCount,\n // eslint-disable-next-line max-params\n ) => {\n if (diagnostic.code === 6031) return\n // https://github.com/microsoft/TypeScript/issues/32542\n // https://github.com/microsoft/TypeScript/blob/dc237b317ed4bbccd043ddda802ffde00362a387/src/compiler/diagnosticMessages.json#L4086-L4088\n switch (diagnostic.code) {\n case 6031:\n case 6032:\n // clear current error and use the newer errors\n logChunk = ''\n // currErr = null\n currDiagnostics = []\n return\n case 6193: // 1 Error\n case 6194: // 0 errors or 2+ errors\n if (overlay) {\n parentPort?.postMessage({\n type: ACTION_TYPES.overlayError,\n payload: toClientPayload('vue-tsc', currDiagnostics),\n })\n }\n }\n\n ensureCall(() => {\n if (errorCount === 0) {\n logChunk = ''\n }\n\n if (terminal) {\n logChunk =\n logChunk +\n os.EOL +\n wrapCheckerSummary('vue-tsc', diagnostic.messageText.toString())\n if (logChunk === prevLogChunk) {\n return\n }\n\n // TODO: only macOS will report multiple times for same result\n prevLogChunk = logChunk\n consoleLog(logChunk, errorCount ? 'error' : 'info')\n }\n })\n }\n\n // https://github.com/microsoft/TypeScript/issues/32385\n // https://github.com/microsoft/TypeScript/pull/33082/files\n const createProgram = vueTs.createEmitAndSemanticDiagnosticsBuilderProgram\n\n if (\n typeof pluginConfig.vueTsc === 'object' &&\n pluginConfig.vueTsc.buildMode\n ) {\n const host = forceNoEmitOnSolutionBuilderHost(\n vueTs,\n vueTs.createSolutionBuilderWithWatchHost(\n vueTs.sys,\n createProgram,\n reportDiagnostic,\n undefined,\n reportWatchStatusChanged,\n ),\n )\n\n vueTs.createSolutionBuilderWithWatch(host, [configFile], {}).build()\n } else {\n const host = vueTs.createWatchCompilerHost(\n configFile,\n { noEmit: true },\n vueTs.sys,\n createProgram,\n reportDiagnostic,\n reportWatchStatusChanged,\n )\n\n vueTs.createWatchProgram(host)\n }\n },\n }\n}\n\nexport class VueTscChecker extends Checker<'vueTsc'> {\n public constructor() {\n super({\n name: 'vueTsc',\n absFilePath: __filename,\n build: {\n buildBin: (config) => {\n if (typeof config.vueTsc === 'object') {\n const { root = '', tsconfigPath = '', buildMode } = config.vueTsc\n\n const args = [buildMode ? '-b' : '--noEmit']\n\n // Custom config path\n let projectPath = ''\n if (root || tsconfigPath) {\n projectPath = root ? path.join(root, tsconfigPath) : tsconfigPath\n }\n\n if (projectPath) {\n // In build mode, the tsconfig path is an argument to -b, e.g. \"vue-tsc -b [path]\"\n if (buildMode) {\n args.push(projectPath)\n } else {\n args.push('-p', projectPath)\n }\n }\n\n return ['vue-tsc', args]\n }\n\n return ['vue-tsc', ['--noEmit']]\n },\n },\n createDiagnostic,\n })\n }\n\n public init() {\n const _createServeAndBuild = super.initMainThread()\n createServeAndBuild = _createServeAndBuild\n super.initWorkerThread()\n }\n}\n\nexport { createServeAndBuild }\n\nconst tscChecker = new VueTscChecker()\ntscChecker.prepare()\ntscChecker.init()\n"],"mappings":"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","names":[]}