{"version":3,"file":"main.js","names":[],"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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"}