You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

1125 lines
47 KiB

"use strict";
var __webpack_require__ = {};
(()=>{
__webpack_require__.n = (module)=>{
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
__webpack_require__.d(getter, {
a: getter
});
return getter;
};
})();
(()=>{
__webpack_require__.d = (exports1, definition)=>{
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
enumerable: true,
get: definition[key]
});
};
})();
(()=>{
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
})();
var __webpack_exports__ = {};
const external_node_process_namespaceObject = require("node:process");
var external_node_process_default = /*#__PURE__*/ __webpack_require__.n(external_node_process_namespaceObject);
function isClosedIpcChannelError(error) {
if ('object' == typeof error && null !== error && 'code' in error) {
const CLOSED_IPC_ERROR_CODES = new Set([
'ERR_IPC_CHANNEL_CLOSED',
'EPIPE'
]);
return CLOSED_IPC_ERROR_CODES.has(error.code);
}
return false;
}
function exposeRpc(fn) {
const sendMessage = (message)=>new Promise((resolve, reject)=>{
if (external_node_process_default().send) if (external_node_process_default().connected) external_node_process_default().send(message, void 0, void 0, (error)=>{
if (error) reject(error);
else resolve(void 0);
});
else reject(new Error(`Process ${external_node_process_default().pid} doesn't have open IPC channels`));
else reject(new Error(`Process ${external_node_process_default().pid} doesn't have IPC channels`));
});
const handleMessage = async (message)=>{
if ('call' === message.type) {
if (!external_node_process_default().send) return;
let value;
let error;
try {
value = await fn(...message.args);
} catch (fnError) {
error = fnError;
}
try {
if (error) await sendMessage({
type: 'reject',
id: message.id,
error
});
else await sendMessage({
type: 'resolve',
id: message.id,
value
});
} catch (sendError) {
if (isClosedIpcChannelError(sendError)) return void console.warn('[type-check] Skipped because the parent process exited. Build may have failed or been interrupted.');
if (error) console.error(error);
console.error(sendError);
}
}
};
external_node_process_default().on('message', handleMessage);
}
require("node:child_process");
const WORKER_DATA_ENV_KEY = 'WORKER_DATA';
function getRpcWorkerData() {
return JSON.parse(external_node_process_namespaceObject.env[WORKER_DATA_ENV_KEY] || '{}');
}
const external_node_path_namespaceObject = require("node:path");
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
function forwardSlash(input) {
return external_node_path_default().normalize(input).replace(/\\+/g, '/');
}
const external_node_os_namespaceObject = require("node:os");
function compareIssuePositions(positionA, positionB) {
if (positionA === positionB) return 0;
if (!positionA) return -1;
if (!positionB) return 1;
return Math.sign(positionA.line - positionB.line) || Math.sign(positionA.column - positionB.column);
}
function compareIssueLocations(locationA, locationB) {
if (locationA === locationB) return 0;
if (!locationA) return -1;
if (!locationB) return 1;
return compareIssuePositions(locationA.start, locationB.start) || compareIssuePositions(locationA.end, locationB.end);
}
function isIssueSeverity(value) {
return [
'error',
'warning'
].includes(value);
}
function compareIssueSeverities(severityA, severityB) {
const [priorityA, priorityB] = [
severityA,
severityB
].map((severity)=>[
'warning',
'error'
].indexOf(severity));
return Math.sign(priorityB - priorityA);
}
function isIssue(value) {
return !!value && 'object' == typeof value && isIssueSeverity(value.severity) && !!value.code && !!value.message;
}
function compareStrings(stringA, stringB) {
if (stringA === stringB) return 0;
if (null == stringA) return -1;
if (null == stringB) return 1;
return stringA.toString().localeCompare(stringB.toString());
}
function compareIssues(issueA, issueB) {
return compareIssueSeverities(issueA.severity, issueB.severity) || compareStrings(issueA.file, issueB.file) || compareIssueLocations(issueA.location, issueB.location) || compareStrings(issueA.code, issueB.code) || compareStrings(issueA.message, issueB.message) || 0;
}
function equalsIssues(issueA, issueB) {
return 0 === compareIssues(issueA, issueB);
}
function deduplicateAndSortIssues(issues) {
const sortedIssues = issues.filter(isIssue).sort(compareIssues);
return sortedIssues.filter((issue, index)=>0 === index || !equalsIssues(issue, sortedIssues[index - 1]));
}
const worker_config_config = getRpcWorkerData();
const typescript = require(worker_config_config.typescriptPath);
const diagnosticsPerConfigFile = new Map();
function updateDiagnostics(configFile, diagnostics) {
diagnosticsPerConfigFile.set(configFile, diagnostics);
}
function getIssues(defaultSeverity) {
const allDiagnostics = [];
diagnosticsPerConfigFile.forEach((diagnostics)=>{
allDiagnostics.push(...diagnostics);
});
return createIssuesFromDiagnostics(allDiagnostics, defaultSeverity);
}
function invalidateDiagnostics() {
diagnosticsPerConfigFile.clear();
}
function getDiagnosticsOfProgram(program) {
const programDiagnostics = [];
try {
if (worker_config_config.diagnosticOptions.syntactic) programDiagnostics.push(...program.getSyntacticDiagnostics());
if (worker_config_config.diagnosticOptions.global) programDiagnostics.push(...program.getGlobalDiagnostics());
if (worker_config_config.diagnosticOptions.semantic) programDiagnostics.push(...program.getSemanticDiagnostics());
if (worker_config_config.diagnosticOptions.declaration) programDiagnostics.push(...program.getDeclarationDiagnostics());
} catch (e) {
if (e instanceof Error) programDiagnostics.push({
code: 1,
category: 1,
messageText: `TSC compiler crashed: ${e.message}
${e.stack}`,
file: void 0,
start: void 0,
length: void 0
});
}
return programDiagnostics;
}
function createIssueFromDiagnostic(diagnostic, defaultSeverity) {
let file;
let location;
if (diagnostic.file) {
file = diagnostic.file.fileName;
if (diagnostic.start && diagnostic.length) {
const { line: startLine, character: startCharacter } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);
const { line: endLine, character: endCharacter } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start + diagnostic.length);
location = {
start: {
line: startLine + 1,
column: startCharacter + 1
},
end: {
line: endLine + 1,
column: endCharacter + 1
}
};
}
}
const getSeverity = ()=>{
if ('auto' === defaultSeverity) return 0 === diagnostic.category ? 'warning' : 'error';
return defaultSeverity;
};
return {
code: 'TS' + String(diagnostic.code),
severity: getSeverity(),
message: typescript.flattenDiagnosticMessageText(diagnostic.messageText, external_node_os_namespaceObject.EOL),
file,
location
};
}
function createIssuesFromDiagnostics(diagnostics, defaultSeverity) {
return deduplicateAndSortIssues(diagnostics.map((diagnostic)=>createIssueFromDiagnostic(diagnostic, defaultSeverity)));
}
const external_memfs_namespaceObject = require("memfs");
const external_node_fs_namespaceObject = require("node:fs");
var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
const existsCache = new Map();
const readStatsCache = new Map();
const readFileCache = new Map();
const readDirCache = new Map();
const realPathCache = new Map();
const realFileSystem = {
exists (path) {
return exists(getRealPath(path));
},
readFile (path, encoding) {
return readFile(getRealPath(path), encoding);
},
readDir (path) {
return readDir(getRealPath(path));
},
readStats (path) {
return readStats(getRealPath(path));
},
realPath (path) {
return getRealPath(path);
},
normalizePath (path) {
return (0, external_node_path_namespaceObject.normalize)(path);
},
writeFile (path, data) {
writeFile(getRealPath(path), data);
},
deleteFile (path) {
deleteFile(getRealPath(path));
},
createDir (path) {
createDir(getRealPath(path));
},
updateTimes (path, atime, mtime) {
updateTimes(getRealPath(path), atime, mtime);
},
clearCache () {
existsCache.clear();
readStatsCache.clear();
readFileCache.clear();
readDirCache.clear();
realPathCache.clear();
}
};
function exists(path) {
const normalizedPath = (0, external_node_path_namespaceObject.normalize)(path);
if (!existsCache.has(normalizedPath)) existsCache.set(normalizedPath, external_node_fs_default().existsSync(normalizedPath));
return !!existsCache.get(normalizedPath);
}
function readStats(path) {
const normalizedPath = (0, external_node_path_namespaceObject.normalize)(path);
if (!readStatsCache.has(normalizedPath)) {
if (exists(normalizedPath)) readStatsCache.set(normalizedPath, external_node_fs_default().statSync(normalizedPath));
}
return readStatsCache.get(normalizedPath);
}
function readFile(path, encoding) {
const normalizedPath = (0, external_node_path_namespaceObject.normalize)(path);
if (!readFileCache.has(normalizedPath)) {
const stats = readStats(normalizedPath);
if (stats && stats.isFile()) readFileCache.set(normalizedPath, external_node_fs_default().readFileSync(normalizedPath, {
encoding: encoding
}).toString());
else readFileCache.set(normalizedPath, void 0);
}
return readFileCache.get(normalizedPath);
}
function readDir(path) {
const normalizedPath = (0, external_node_path_namespaceObject.normalize)(path);
if (!readDirCache.has(normalizedPath)) {
const stats = readStats(normalizedPath);
if (stats && stats.isDirectory()) readDirCache.set(normalizedPath, external_node_fs_default().readdirSync(normalizedPath, {
withFileTypes: true
}));
else readDirCache.set(normalizedPath, []);
}
return readDirCache.get(normalizedPath) || [];
}
function getRealPath(path) {
const normalizedPath = (0, external_node_path_namespaceObject.normalize)(path);
if (!realPathCache.has(normalizedPath)) {
let base = normalizedPath;
let nested = '';
while(base !== (0, external_node_path_namespaceObject.dirname)(base)){
if (exists(base)) {
realPathCache.set(normalizedPath, (0, external_node_path_namespaceObject.normalize)((0, external_node_path_namespaceObject.join)(external_node_fs_default().realpathSync(base), nested)));
break;
}
nested = (0, external_node_path_namespaceObject.join)((0, external_node_path_namespaceObject.basename)(base), nested);
base = (0, external_node_path_namespaceObject.dirname)(base);
}
}
return realPathCache.get(normalizedPath) || normalizedPath;
}
function createDir(path) {
const normalizedPath = (0, external_node_path_namespaceObject.normalize)(path);
external_node_fs_default().mkdirSync(normalizedPath, {
recursive: true
});
existsCache.set(normalizedPath, true);
if (readDirCache.has((0, external_node_path_namespaceObject.dirname)(normalizedPath))) readDirCache.delete((0, external_node_path_namespaceObject.dirname)(normalizedPath));
if (readStatsCache.has(normalizedPath)) readStatsCache.delete(normalizedPath);
}
function writeFile(path, data) {
const normalizedPath = (0, external_node_path_namespaceObject.normalize)(path);
if (!exists((0, external_node_path_namespaceObject.dirname)(normalizedPath))) createDir((0, external_node_path_namespaceObject.dirname)(normalizedPath));
external_node_fs_default().writeFileSync(normalizedPath, data);
existsCache.set(normalizedPath, true);
if (readDirCache.has((0, external_node_path_namespaceObject.dirname)(normalizedPath))) readDirCache.delete((0, external_node_path_namespaceObject.dirname)(normalizedPath));
if (readStatsCache.has(normalizedPath)) readStatsCache.delete(normalizedPath);
if (readFileCache.has(normalizedPath)) readFileCache.delete(normalizedPath);
}
function deleteFile(path) {
if (exists(path)) {
const normalizedPath = (0, external_node_path_namespaceObject.normalize)(path);
external_node_fs_default().unlinkSync(normalizedPath);
existsCache.set(normalizedPath, false);
if (readDirCache.has((0, external_node_path_namespaceObject.dirname)(normalizedPath))) readDirCache.delete((0, external_node_path_namespaceObject.dirname)(normalizedPath));
if (readStatsCache.has(normalizedPath)) readStatsCache.delete(normalizedPath);
if (readFileCache.has(normalizedPath)) readFileCache.delete(normalizedPath);
}
}
function updateTimes(path, atime, mtime) {
if (exists(path)) {
const normalizedPath = (0, external_node_path_namespaceObject.normalize)(path);
external_node_fs_default().utimesSync((0, external_node_path_namespaceObject.normalize)(path), atime, mtime);
if (readStatsCache.has(normalizedPath)) readStatsCache.delete(normalizedPath);
}
}
const memFileSystem = {
...realFileSystem,
exists (path) {
return mem_file_system_exists(realFileSystem.realPath(path));
},
readFile (path, encoding) {
return mem_file_system_readFile(realFileSystem.realPath(path), encoding);
},
readDir (path) {
return mem_file_system_readDir(realFileSystem.realPath(path));
},
readStats (path) {
return mem_file_system_readStats(realFileSystem.realPath(path));
},
writeFile (path, data) {
mem_file_system_writeFile(realFileSystem.realPath(path), data);
},
deleteFile (path) {
mem_file_system_deleteFile(realFileSystem.realPath(path));
},
createDir (path) {
mem_file_system_createDir(realFileSystem.realPath(path));
},
updateTimes (path, atime, mtime) {
mem_file_system_updateTimes(realFileSystem.realPath(path), atime, mtime);
},
clearCache () {
realFileSystem.clearCache();
}
};
function mem_file_system_exists(path) {
return external_memfs_namespaceObject.fs.existsSync(realFileSystem.normalizePath(path));
}
function mem_file_system_readStats(path) {
return mem_file_system_exists(path) ? external_memfs_namespaceObject.fs.statSync(realFileSystem.normalizePath(path)) : void 0;
}
function mem_file_system_readFile(path, encoding) {
const stats = mem_file_system_readStats(path);
if (stats && stats.isFile()) return external_memfs_namespaceObject.fs.readFileSync(realFileSystem.normalizePath(path), {
encoding: encoding
}).toString();
}
function mem_file_system_readDir(path) {
const stats = mem_file_system_readStats(path);
if (stats && stats.isDirectory()) return external_memfs_namespaceObject.fs.readdirSync(realFileSystem.normalizePath(path), {
withFileTypes: true
});
return [];
}
function mem_file_system_createDir(path) {
external_memfs_namespaceObject.fs.mkdirSync(realFileSystem.normalizePath(path), {
recursive: true
});
}
function mem_file_system_writeFile(path, data) {
if (!mem_file_system_exists((0, external_node_path_namespaceObject.dirname)(path))) mem_file_system_createDir((0, external_node_path_namespaceObject.dirname)(path));
external_memfs_namespaceObject.fs.writeFileSync(realFileSystem.normalizePath(path), data);
}
function mem_file_system_deleteFile(path) {
if (mem_file_system_exists(path)) external_memfs_namespaceObject.fs.unlinkSync(realFileSystem.normalizePath(path));
}
function mem_file_system_updateTimes(path, atime, mtime) {
if (mem_file_system_exists(path)) external_memfs_namespaceObject.fs.utimesSync(realFileSystem.normalizePath(path), atime, mtime);
}
const passiveFileSystem = {
...memFileSystem,
exists (path) {
return passive_file_system_exists(realFileSystem.realPath(path));
},
readFile (path, encoding) {
return passive_file_system_readFile(realFileSystem.realPath(path), encoding);
},
readDir (path) {
return passive_file_system_readDir(realFileSystem.realPath(path));
},
readStats (path) {
return passive_file_system_readStats(realFileSystem.realPath(path));
},
realPath (path) {
return realFileSystem.realPath(path);
},
clearCache () {
realFileSystem.clearCache();
}
};
function passive_file_system_exists(path) {
return realFileSystem.exists(path) || memFileSystem.exists(path);
}
function passive_file_system_readFile(path, encoding) {
const fsStats = realFileSystem.readStats(path);
const memStats = memFileSystem.readStats(path);
if (fsStats && memStats) return fsStats.mtimeMs > memStats.mtimeMs ? realFileSystem.readFile(path, encoding) : memFileSystem.readFile(path, encoding);
if (fsStats) return realFileSystem.readFile(path, encoding);
if (memStats) return memFileSystem.readFile(path, encoding);
}
function passive_file_system_readDir(path) {
const fsDirents = realFileSystem.readDir(path);
const memDirents = memFileSystem.readDir(path);
return fsDirents.filter((fsDirent)=>!memDirents.some((memDirent)=>memDirent.name === fsDirent.name)).concat(memDirents);
}
function passive_file_system_readStats(path) {
const fsStats = realFileSystem.readStats(path);
const memStats = memFileSystem.readStats(path);
if (fsStats && memStats) return fsStats.mtimeMs > memStats.mtimeMs ? fsStats : memStats;
if (fsStats) return fsStats;
if (memStats) return memStats;
}
const mode = worker_config_config.mode;
let artifacts = {
files: [],
dirs: [],
excluded: [],
extensions: []
};
let isInitialRun = true;
const fileWatcherCallbacksMap = new Map();
const directoryWatcherCallbacksMap = new Map();
const recursiveDirectoryWatcherCallbacksMap = new Map();
const system_deletedFiles = new Map();
const timeoutCallbacks = new Set();
const ignoredPaths = [
'/node_modules/.',
'/.git',
'/.#'
];
const system = {
...typescript.sys,
useCaseSensitiveFileNames: true,
realpath (path) {
return getReadFileSystem(path).realPath(path);
},
fileExists (path) {
const stats = getReadFileSystem(path).readStats(path);
return !!stats && stats.isFile();
},
readFile (path, encoding) {
return getReadFileSystem(path).readFile(path, encoding);
},
getFileSize (path) {
const stats = getReadFileSystem(path).readStats(path);
return stats ? stats.size : 0;
},
writeFile (path, data) {
getWriteFileSystem(path).writeFile(path, data);
system.invokeFileChanged(path);
},
deleteFile (path) {
getWriteFileSystem(path).deleteFile(path);
system.invokeFileDeleted(path);
},
directoryExists (path) {
return Boolean(getReadFileSystem(path).readStats(path)?.isDirectory());
},
createDirectory (path) {
getWriteFileSystem(path).createDir(path);
invokeDirectoryWatchers(path);
},
getDirectories (path) {
const dirents = getReadFileSystem(path).readDir(path);
return dirents.filter((dirent)=>dirent.isDirectory() || dirent.isSymbolicLink() && system.directoryExists((0, external_node_path_namespaceObject.join)(path, dirent.name))).map((dirent)=>dirent.name);
},
getModifiedTime (path) {
if (void 0 === path) return;
const stats = getReadFileSystem(path).readStats(path);
if (stats) return stats.mtime;
},
setModifiedTime (path, date) {
getWriteFileSystem(path).updateTimes(path, date, date);
invokeDirectoryWatchers(path);
invokeFileWatchers(path, typescript.FileWatcherEventKind.Changed);
},
watchFile (path, callback) {
return createWatcher(fileWatcherCallbacksMap, path, callback);
},
watchDirectory (path, callback, recursive = false) {
return createWatcher(recursive ? recursiveDirectoryWatcherCallbacksMap : directoryWatcherCallbacksMap, path, callback);
},
setTimeout: (callback, timeout, ...args)=>{
const timeoutId = setImmediate(()=>{
callback(...args);
timeoutCallbacks.delete(timeoutId);
});
timeoutCallbacks.add(timeoutId);
return timeoutId;
},
clearTimeout: (timeoutId)=>{
clearImmediate(timeoutId);
timeoutCallbacks.delete(timeoutId);
},
async waitForQueued () {
while(timeoutCallbacks.size > 0)await new Promise((resolve)=>setImmediate(resolve));
isInitialRun = false;
},
invokeFileCreated (path) {
const normalizedPath = normalizeAndResolvePath(path);
invokeFileWatchers(path, typescript.FileWatcherEventKind.Created);
invokeDirectoryWatchers(normalizedPath);
system_deletedFiles.set(normalizedPath, false);
},
invokeFileChanged (path) {
const normalizedPath = normalizeAndResolvePath(path);
if (system_deletedFiles.get(normalizedPath) || !fileWatcherCallbacksMap.has(normalizedPath)) {
invokeFileWatchers(path, typescript.FileWatcherEventKind.Created);
invokeDirectoryWatchers(normalizedPath);
system_deletedFiles.set(normalizedPath, false);
} else invokeFileWatchers(path, typescript.FileWatcherEventKind.Changed);
},
invokeFileDeleted (path) {
const normalizedPath = normalizeAndResolvePath(path);
if (!system_deletedFiles.get(normalizedPath)) {
invokeFileWatchers(path, typescript.FileWatcherEventKind.Deleted);
invokeDirectoryWatchers(path);
system_deletedFiles.set(normalizedPath, true);
}
},
invalidateCache () {
realFileSystem.clearCache();
memFileSystem.clearCache();
passiveFileSystem.clearCache();
},
setArtifacts (nextArtifacts) {
artifacts = nextArtifacts;
}
};
function createWatcher(watchersMap, path, callback) {
const normalizedPath = normalizeAndResolvePath(path);
const watchers = watchersMap.get(normalizedPath) || [];
const nextWatchers = [
...watchers,
callback
];
watchersMap.set(normalizedPath, nextWatchers);
return {
close: ()=>{
const watchers = watchersMap.get(normalizedPath) || [];
const nextWatchers = watchers.filter((watcher)=>watcher !== callback);
if (nextWatchers.length > 0) watchersMap.set(normalizedPath, nextWatchers);
else watchersMap.delete(normalizedPath);
}
};
}
function invokeFileWatchers(path, event) {
const normalizedPath = normalizeAndResolvePath(path);
if (normalizedPath.endsWith('.js')) invokeFileWatchers(normalizedPath.slice(0, -3) + '.d.ts', event);
const fileWatcherCallbacks = fileWatcherCallbacksMap.get(normalizedPath);
if (fileWatcherCallbacks) fileWatcherCallbacks.forEach((fileWatcherCallback)=>{
fileWatcherCallback(forwardSlash(normalizedPath), event);
});
}
function invokeDirectoryWatchers(path) {
const normalizedPath = normalizeAndResolvePath(path);
const directory = (0, external_node_path_namespaceObject.dirname)(normalizedPath);
if (ignoredPaths.some((ignoredPath)=>forwardSlash(normalizedPath).includes(ignoredPath))) return;
const directoryWatcherCallbacks = directoryWatcherCallbacksMap.get(directory);
if (directoryWatcherCallbacks) directoryWatcherCallbacks.forEach((directoryWatcherCallback)=>{
directoryWatcherCallback(forwardSlash(normalizedPath));
});
recursiveDirectoryWatcherCallbacksMap.forEach((recursiveDirectoryWatcherCallbacks, watchedDirectory)=>{
if (watchedDirectory === directory || directory.startsWith(watchedDirectory) && '/' === forwardSlash(directory)[watchedDirectory.length]) recursiveDirectoryWatcherCallbacks.forEach((recursiveDirectoryWatcherCallback)=>{
recursiveDirectoryWatcherCallback(forwardSlash(normalizedPath));
});
});
}
function normalizeAndResolvePath(path) {
let normalizedPath = realFileSystem.normalizePath(path);
try {
normalizedPath = realFileSystem.realPath(normalizedPath);
} catch (error) {}
return normalizedPath;
}
function isArtifact(path) {
return (artifacts.dirs.some((dir)=>path.includes(dir)) || artifacts.files.some((file)=>path === file)) && artifacts.extensions.some((extension)=>path.endsWith(extension));
}
function getReadFileSystem(path) {
if (('readonly' === mode || 'write-tsbuildinfo' === mode) && isArtifact(path)) {
if (isInitialRun && !memFileSystem.exists(path) && passiveFileSystem.exists(path)) {
const stats = passiveFileSystem.readStats(path);
if (stats?.isFile()) {
const content = passiveFileSystem.readFile(path);
if (content) {
memFileSystem.writeFile(path, content);
memFileSystem.updateTimes(path, stats.atime, stats.mtime);
}
}
return memFileSystem;
}
}
return passiveFileSystem;
}
function getWriteFileSystem(path) {
if ('write-references' === mode || 'write-tsbuildinfo' === mode && path.endsWith('.tsbuildinfo') || 'write-dts' === mode && [
'.tsbuildinfo',
'.d.ts',
'.d.ts.map'
].some((suffix)=>path.endsWith(suffix))) return realFileSystem;
return passiveFileSystem;
}
let config_parsedConfig;
let parseConfigDiagnostics = [];
const parseConfigFileHost = {
...system,
onUnRecoverableConfigFileDiagnostic: (diagnostic)=>{
parseConfigDiagnostics.push(diagnostic);
}
};
function getUserProvidedConfigOverwrite() {
return worker_config_config.configOverwrite || {};
}
function getImplicitConfigOverwrite() {
const baseCompilerOptionsOverwrite = {
skipLibCheck: true,
sourceMap: false,
inlineSourceMap: false
};
switch(worker_config_config.mode){
case 'write-dts':
return {
compilerOptions: {
...baseCompilerOptionsOverwrite,
declaration: true,
emitDeclarationOnly: true,
noEmit: false
}
};
case 'write-tsbuildinfo':
case 'write-references':
return {
compilerOptions: {
...baseCompilerOptionsOverwrite,
declaration: true,
emitDeclarationOnly: false,
noEmit: false
}
};
}
return {
compilerOptions: baseCompilerOptionsOverwrite
};
}
function applyConfigOverwrite(baseConfig, ...overwriteConfigs) {
let config = baseConfig;
for (const overwriteConfig of overwriteConfigs)config = {
...config || {},
...overwriteConfig || {},
compilerOptions: {
...config?.compilerOptions || {},
...overwriteConfig?.compilerOptions || {}
}
};
return config;
}
function parseConfig(configFileName, configFileContext) {
const configFilePath = forwardSlash(configFileName);
const { config: baseConfig, error: readConfigError } = typescript.readConfigFile(configFilePath, parseConfigFileHost.readFile);
const overwrittenConfig = applyConfigOverwrite(baseConfig || {}, getImplicitConfigOverwrite(), getUserProvidedConfigOverwrite());
const parsedConfigFile = typescript.parseJsonConfigFileContent(overwrittenConfig, parseConfigFileHost, configFileContext);
return {
...parsedConfigFile,
options: {
...parsedConfigFile.options,
configFilePath: configFilePath
},
errors: readConfigError ? [
readConfigError
] : parsedConfigFile.errors
};
}
function getParseConfigIssues(defaultSeverity) {
const issues = createIssuesFromDiagnostics(parseConfigDiagnostics, defaultSeverity);
issues.forEach((issue)=>{
if (!issue.file) issue.file = worker_config_config.configFile;
});
return issues;
}
function getParsedConfig(force = false) {
if (!config_parsedConfig || force) {
config_parsedConfig = parseConfig(worker_config_config.configFile, worker_config_config.context);
parseConfigDiagnostics = config_parsedConfig.errors || [];
}
return config_parsedConfig;
}
function parseNextConfig() {
const prevParsedConfig = config_parsedConfig;
const nextParsedConfig = getParsedConfig(true);
return [
prevParsedConfig,
nextParsedConfig
];
}
function invalidateConfig() {
config_parsedConfig = void 0;
parseConfigDiagnostics = [];
}
function getConfigFilePathFromCompilerOptions(compilerOptions) {
return compilerOptions.configFilePath;
}
function getConfigFilePathFromProgram(program) {
return getConfigFilePathFromCompilerOptions(program.getCompilerOptions());
}
function getConfigFilePathFromBuilderProgram(builderProgram) {
return getConfigFilePathFromCompilerOptions(builderProgram.getProgram().getCompilerOptions());
}
function didConfigFileChanged({ changedFiles = [], deletedFiles = [] }) {
return [
...changedFiles,
...deletedFiles
].map((file)=>external_node_path_namespaceObject.normalize(file)).includes(external_node_path_namespaceObject.normalize(worker_config_config.configFile));
}
function didDependenciesProbablyChanged(dependencies, { changedFiles = [], deletedFiles = [] }) {
const didSomeDependencyHasBeenAdded = changedFiles.some((changeFile)=>!dependencies.files.includes(changeFile));
const didSomeDependencyHasBeenDeleted = deletedFiles.some((deletedFile)=>dependencies.files.includes(deletedFile));
return didSomeDependencyHasBeenAdded || didSomeDependencyHasBeenDeleted;
}
function didRootFilesChanged() {
const [prevConfig, nextConfig] = parseNextConfig();
return prevConfig && JSON.stringify(prevConfig.fileNames) !== JSON.stringify(nextConfig.fileNames);
}
function invalidateTsBuildInfo() {
const parsedConfig = getParsedConfig();
if ('function' == typeof typescript.getTsBuildInfoEmitOutputFilePath && 'readonly' !== worker_config_config.mode && parsedConfig.options.incremental) {
const tsBuildInfoPath = typescript.getTsBuildInfoEmitOutputFilePath(parsedConfig.options);
if (tsBuildInfoPath) try {
system.deleteFile(tsBuildInfoPath);
} catch (error) {}
}
}
function emitTsBuildInfoIfNeeded(builderProgram) {
const parsedConfig = getParsedConfig();
if ('readonly' !== worker_config_config.mode && parsedConfig && isIncrementalEnabled(parsedConfig.options)) {
const program = builderProgram.getProgram();
if ('function' == typeof program.emitBuildInfo) program.emitBuildInfo();
}
}
function getTsBuildInfoEmitPath(compilerOptions) {
if ('function' == typeof typescript.getTsBuildInfoEmitOutputFilePath) return typescript.getTsBuildInfoEmitOutputFilePath(compilerOptions);
const removeJsonExtension = (filePath)=>filePath.endsWith('.json') ? filePath.slice(0, -5) : filePath;
const configFile = compilerOptions.configFilePath;
if (!isIncrementalEnabled(compilerOptions)) return;
if (compilerOptions.tsBuildInfoFile) return compilerOptions.tsBuildInfoFile;
const outPath = compilerOptions.outFile || compilerOptions.out;
let buildInfoExtensionLess;
if (outPath) buildInfoExtensionLess = removeJsonExtension(outPath);
else {
if (!configFile) return;
const configFileExtensionLess = removeJsonExtension(configFile);
buildInfoExtensionLess = compilerOptions.outDir ? compilerOptions.rootDir ? external_node_path_namespaceObject.resolve(compilerOptions.outDir, external_node_path_namespaceObject.relative(compilerOptions.rootDir, configFileExtensionLess)) : external_node_path_namespaceObject.resolve(compilerOptions.outDir, external_node_path_namespaceObject.basename(configFileExtensionLess)) : configFileExtensionLess;
}
return buildInfoExtensionLess + '.tsbuildinfo';
}
function isIncrementalEnabled(compilerOptions) {
return Boolean((compilerOptions.incremental || compilerOptions.composite) && !compilerOptions.outFile);
}
let artifacts_artifacts;
function getArtifacts(force = false) {
if (!artifacts_artifacts || force) {
const parsedConfig = getParsedConfig();
artifacts_artifacts = getArtifactsWorker(parsedConfig, worker_config_config.context);
}
return artifacts_artifacts;
}
function invalidateArtifacts() {
artifacts_artifacts = void 0;
}
function registerArtifacts() {
system.setArtifacts(getArtifacts());
}
function getArtifactsWorker(parsedConfig, configFileContext, processedConfigFiles = []) {
const files = new Set();
const dirs = new Set();
if (parsedConfig.fileNames.length > 0) {
if (parsedConfig.options.outFile) files.add(external_node_path_namespaceObject.resolve(configFileContext, parsedConfig.options.outFile));
const tsBuildInfoPath = getTsBuildInfoEmitPath(parsedConfig.options);
if (tsBuildInfoPath) files.add(external_node_path_namespaceObject.resolve(configFileContext, tsBuildInfoPath));
if (parsedConfig.options.outDir) dirs.add(external_node_path_namespaceObject.resolve(configFileContext, parsedConfig.options.outDir));
}
for (const projectReference of parsedConfig.projectReferences || []){
const configFile = typescript.resolveProjectReferencePath(projectReference);
if (processedConfigFiles.includes(configFile)) continue;
const parsedConfig = parseConfig(configFile, external_node_path_namespaceObject.dirname(configFile));
const childArtifacts = getArtifactsWorker(parsedConfig, configFileContext, [
...processedConfigFiles,
configFile
]);
childArtifacts.files.forEach((file)=>{
files.add(file);
});
childArtifacts.dirs.forEach((dir)=>{
dirs.add(dir);
});
}
const extensions = [
typescript.Extension.Dts,
typescript.Extension.Js,
typescript.Extension.TsBuildInfo
];
return {
files: Array.from(files).map((file)=>external_node_path_namespaceObject.normalize(file)),
dirs: Array.from(dirs).map((dir)=>external_node_path_namespaceObject.normalize(dir)),
excluded: [],
extensions
};
}
let dependencies_dependencies;
function getDependencies(force = false) {
if (!dependencies_dependencies || force) {
const parsedConfig = getParsedConfig();
dependencies_dependencies = getDependenciesWorker(parsedConfig, worker_config_config.context);
}
return dependencies_dependencies;
}
function invalidateDependencies() {
dependencies_dependencies = void 0;
}
function getDependenciesWorker(parsedConfig, configFileContext, processedConfigFiles = []) {
const files = new Set(parsedConfig.fileNames);
const configFilePath = parsedConfig.options.configFilePath;
if ('string' == typeof configFilePath) files.add(configFilePath);
const dirs = new Set(Object.keys(parsedConfig.wildcardDirectories || {}));
const excluded = new Set((parsedConfig.raw?.exclude || []).map((filePath)=>external_node_path_namespaceObject.resolve(configFileContext, filePath)));
for (const projectReference of parsedConfig.projectReferences || []){
const childConfigFilePath = typescript.resolveProjectReferencePath(projectReference);
const childConfigContext = external_node_path_namespaceObject.dirname(childConfigFilePath);
if (processedConfigFiles.includes(childConfigFilePath)) continue;
const childParsedConfig = parseConfig(childConfigFilePath, childConfigContext);
const childDependencies = getDependenciesWorker(childParsedConfig, childConfigContext, [
...processedConfigFiles,
childConfigFilePath
]);
childDependencies.files.forEach((file)=>{
files.add(file);
});
childDependencies.dirs.forEach((dir)=>{
dirs.add(dir);
});
}
const extensions = [
typescript.Extension.Ts,
typescript.Extension.Tsx,
typescript.Extension.Js,
typescript.Extension.Jsx,
typescript.Extension.TsBuildInfo
];
return {
files: Array.from(files).map((file)=>external_node_path_namespaceObject.normalize(file)),
dirs: Array.from(dirs).map((dir)=>external_node_path_namespaceObject.normalize(dir)),
excluded: Array.from(excluded).map((aPath)=>external_node_path_namespaceObject.normalize(aPath)),
extensions: extensions
};
}
const performance = typescript.performance;
function enablePerformanceIfNeeded() {
if (worker_config_config.profile) performance?.enable?.();
}
function disablePerformanceIfNeeded() {
if (worker_config_config.profile) performance?.disable?.();
}
function printPerformanceMeasuresIfNeeded() {
if (worker_config_config.profile) {
const measures = {};
performance?.forEachMeasure?.((measureName, duration)=>{
measures[measureName] = duration;
});
console.table(measures);
}
}
function emitDtsIfNeeded(program) {
const parsedConfig = getParsedConfig();
if ('write-dts' === worker_config_config.mode && parsedConfig.options.declaration) program.emit(void 0, void 0, void 0, true);
}
function createCompilerHost(parsedConfig) {
const baseCompilerHost = typescript.createCompilerHost(parsedConfig.options);
return {
...baseCompilerHost,
fileExists: system.fileExists,
readFile: system.readFile,
directoryExists: system.directoryExists,
getDirectories: system.getDirectories,
realpath: system.realpath
};
}
const traceableTypescript = typescript;
function startTracingIfNeeded(compilerOptions) {
if ('string' == typeof compilerOptions.generateTrace && 'function' == typeof traceableTypescript.startTracing) traceableTypescript.startTracing(worker_config_config.build ? 'build' : 'project', compilerOptions.generateTrace, getConfigFilePathFromCompilerOptions(compilerOptions));
}
function stopTracingIfNeeded(program) {
const compilerOptions = program.getCompilerOptions();
if ('string' == typeof compilerOptions.generateTrace && 'function' == typeof traceableTypescript.tracing?.stopTracing) traceableTypescript.tracing.stopTracing();
}
function dumpTracingLegendIfNeeded() {
traceableTypescript.tracing?.dumpLegend();
}
let program_compilerHost;
let program_program;
function useProgram() {
const parsedConfig = getParsedConfig();
if (!program_compilerHost) program_compilerHost = createCompilerHost(parsedConfig);
if (!program_program) {
startTracingIfNeeded(parsedConfig.options);
program_program = typescript.createProgram({
rootNames: parsedConfig.fileNames,
options: parsedConfig.options,
projectReferences: parsedConfig.projectReferences,
host: program_compilerHost
});
}
updateDiagnostics(getConfigFilePathFromProgram(program_program), getDiagnosticsOfProgram(program_program));
emitDtsIfNeeded(program_program);
stopTracingIfNeeded(program_program);
}
function invalidateProgram(withHost = false) {
if (withHost) program_compilerHost = void 0;
program_program = void 0;
}
function createWatchCompilerHost(parsedConfig, createProgram, reportDiagnostic, reportWatchStatus, afterProgramCreate) {
const baseWatchCompilerHost = typescript.createWatchCompilerHost(parsedConfig.fileNames, parsedConfig.options, system, createProgram, reportDiagnostic, reportWatchStatus, parsedConfig.projectReferences);
return {
...baseWatchCompilerHost,
createProgram (rootNames, options, compilerHost, oldProgram, configFileParsingDiagnostics, projectReferences) {
return baseWatchCompilerHost.createProgram(rootNames, options, compilerHost, oldProgram, configFileParsingDiagnostics, projectReferences);
},
afterProgramCreate (program) {
if (afterProgramCreate) afterProgramCreate(program);
},
onWatchStatusChange (...args) {
if (reportWatchStatus) reportWatchStatus(...args);
},
watchFile: system.watchFile,
watchDirectory: system.watchDirectory,
setTimeout: system.setTimeout,
clearTimeout: system.clearTimeout,
fileExists: system.fileExists,
readFile: system.readFile,
directoryExists: system.directoryExists,
getDirectories: system.getDirectories,
realpath: system.realpath
};
}
function createWatchSolutionBuilderHost(parsedConfig, createProgram, reportDiagnostic, reportWatchStatus, reportSolutionBuilderStatus, afterProgramCreate, afterProgramEmitAndDiagnostics) {
const controlledWatchCompilerHost = createWatchCompilerHost(parsedConfig, createProgram, reportDiagnostic, reportWatchStatus, afterProgramCreate);
return {
...controlledWatchCompilerHost,
reportDiagnostic (diagnostic) {
if (reportDiagnostic) reportDiagnostic(diagnostic);
},
reportSolutionBuilderStatus (diagnostic) {
if (reportSolutionBuilderStatus) reportSolutionBuilderStatus(diagnostic);
},
afterProgramEmitAndDiagnostics (program) {
if (afterProgramEmitAndDiagnostics) afterProgramEmitAndDiagnostics(program);
},
createDirectory (path) {
system.createDirectory(path);
},
writeFile (path, data) {
system.writeFile(path, data);
},
getModifiedTime (fileName) {
return system.getModifiedTime(fileName);
},
setModifiedTime (fileName, date) {
system.setModifiedTime(fileName, date);
},
deleteFile (fileName) {
system.deleteFile(fileName);
},
getParsedCommandLine (fileName) {
return typescript.getParsedCommandLineOfConfigFile(fileName, {
skipLibCheck: true
}, {
...system,
onUnRecoverableConfigFileDiagnostic: (diagnostic)=>{
if (reportDiagnostic) reportDiagnostic(diagnostic);
}
});
}
};
}
let solutionBuilderHost;
let solutionBuilder;
let hostDiagnostics = [];
const HOST_DIAGNOSTICS_KEY = `GLOBAL_${worker_config_config.configFile}`;
function useSolutionBuilder() {
if (!solutionBuilderHost) {
const parsedConfig = getParsedConfig();
solutionBuilderHost = createWatchSolutionBuilderHost(parsedConfig, (rootNames, compilerOptions, host, oldProgram, configFileParsingDiagnostics, projectReferences)=>{
if (compilerOptions) startTracingIfNeeded(compilerOptions);
return typescript.createSemanticDiagnosticsBuilderProgram(rootNames, compilerOptions, host, oldProgram, configFileParsingDiagnostics, projectReferences);
}, (diagnostic)=>{
hostDiagnostics.push(diagnostic);
updateDiagnostics(HOST_DIAGNOSTICS_KEY, hostDiagnostics);
}, (diagnostic)=>{
if (6031 === diagnostic.code || 6032 === diagnostic.code) {
hostDiagnostics = [];
updateDiagnostics(HOST_DIAGNOSTICS_KEY, hostDiagnostics);
}
}, void 0, void 0, (builderProgram)=>{
updateDiagnostics(getConfigFilePathFromBuilderProgram(builderProgram), getDiagnosticsOfProgram(builderProgram));
emitTsBuildInfoIfNeeded(builderProgram);
stopTracingIfNeeded(builderProgram);
});
}
if (!solutionBuilder) {
solutionBuilder = typescript.createSolutionBuilderWithWatch(solutionBuilderHost, [
worker_config_config.configFile
], {
watch: true
});
solutionBuilder.build();
}
}
function invalidateSolutionBuilder(withHost = false) {
if (withHost) solutionBuilderHost = void 0;
solutionBuilder = void 0;
hostDiagnostics = [];
}
let watchCompilerHost;
let watchProgram;
let shouldUpdateRootFiles = false;
function useWatchProgram() {
if (!watchCompilerHost) {
const parsedConfig = getParsedConfig();
watchCompilerHost = createWatchCompilerHost(parsedConfig, (rootNames, compilerOptions, host, oldProgram, configFileParsingDiagnostics, projectReferences)=>{
if (compilerOptions) startTracingIfNeeded(compilerOptions);
return typescript.createSemanticDiagnosticsBuilderProgram(rootNames, compilerOptions, host, oldProgram, configFileParsingDiagnostics, projectReferences);
}, void 0, void 0, (builderProgram)=>{
updateDiagnostics(getConfigFilePathFromBuilderProgram(builderProgram), getDiagnosticsOfProgram(builderProgram));
emitDtsIfNeeded(builderProgram);
emitTsBuildInfoIfNeeded(builderProgram);
stopTracingIfNeeded(builderProgram);
});
watchProgram = void 0;
}
if (!watchProgram) watchProgram = typescript.createWatchProgram(watchCompilerHost);
if (shouldUpdateRootFiles) {
watchProgram.updateRootFileNames(getDependencies().files);
shouldUpdateRootFiles = false;
}
}
function invalidateWatchProgram(withHost = false) {
if (withHost) watchCompilerHost = void 0;
watchProgram = void 0;
}
function invalidateWatchProgramRootFileNames() {
shouldUpdateRootFiles = true;
}
const getIssuesWorker = async (change, watching, defaultSeverity)=>{
system.invalidateCache();
if (didConfigFileChanged(change)) {
invalidateConfig();
invalidateDependencies();
invalidateArtifacts();
invalidateDiagnostics();
invalidateProgram(true);
invalidateWatchProgram(true);
invalidateSolutionBuilder(true);
invalidateTsBuildInfo();
} else if (didDependenciesProbablyChanged(getDependencies(), change)) {
invalidateConfig();
invalidateDependencies();
invalidateArtifacts();
if (didRootFilesChanged()) {
invalidateWatchProgramRootFileNames();
invalidateSolutionBuilder();
}
}
registerArtifacts();
enablePerformanceIfNeeded();
const parseConfigIssues = getParseConfigIssues(defaultSeverity);
if (parseConfigIssues.length) return parseConfigIssues;
if (worker_config_config.build) useSolutionBuilder();
else if (watching) useWatchProgram();
else useProgram();
change.changedFiles?.forEach((changedFile)=>{
system?.invokeFileChanged(changedFile);
});
change.deletedFiles?.forEach((deletedFile)=>{
system?.invokeFileDeleted(deletedFile);
});
await system.waitForQueued();
const issues = getIssues(defaultSeverity);
dumpTracingLegendIfNeeded();
printPerformanceMeasuresIfNeeded();
disablePerformanceIfNeeded();
return issues;
};
exposeRpc(getIssuesWorker);
for(var __webpack_i__ in __webpack_exports__)exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
Object.defineProperty(exports, '__esModule', {
value: true
});