mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-17 01:55:50 -06:00
184 lines
5.2 KiB
TypeScript
184 lines
5.2 KiB
TypeScript
import {
|
|
combinePaths,
|
|
Extension,
|
|
fileExtensionIs,
|
|
Path,
|
|
ResolvedConfigFileName,
|
|
} from "./_namespaces/ts.js";
|
|
|
|
/** @internal */
|
|
export enum UpToDateStatusType {
|
|
Unbuildable,
|
|
UpToDate,
|
|
/**
|
|
* The project appears out of date because its upstream inputs are newer than its outputs,
|
|
* but all of its outputs are actually newer than the previous identical outputs of its (.d.ts) inputs.
|
|
* This means we can Pseudo-build (just touch timestamps), as if we had actually built this project.
|
|
*/
|
|
UpToDateWithUpstreamTypes,
|
|
OutputMissing,
|
|
ErrorReadingFile,
|
|
OutOfDateWithSelf,
|
|
OutOfDateWithUpstream,
|
|
OutOfDateBuildInfoWithPendingEmit,
|
|
OutOfDateBuildInfoWithErrors,
|
|
OutOfDateOptions,
|
|
OutOfDateRoots,
|
|
UpstreamOutOfDate,
|
|
UpstreamBlocked,
|
|
ComputingUpstream,
|
|
TsVersionOutputOfDate,
|
|
UpToDateWithInputFileText,
|
|
|
|
/**
|
|
* Projects with no outputs (i.e. "solution" files)
|
|
*/
|
|
ContainerOnly,
|
|
ForceBuild,
|
|
}
|
|
|
|
/** @internal */
|
|
export type UpToDateStatus =
|
|
| Status.Unbuildable
|
|
| Status.UpToDate
|
|
| Status.OutputMissing
|
|
| Status.ErrorReadingFile
|
|
| Status.OutOfDateWithSelf
|
|
| Status.OutOfDateWithUpstream
|
|
| Status.OutOfDateBuildInfo
|
|
| Status.OutOfDateRoots
|
|
| Status.UpstreamOutOfDate
|
|
| Status.UpstreamBlocked
|
|
| Status.ComputingUpstream
|
|
| Status.TsVersionOutOfDate
|
|
| Status.ContainerOnly
|
|
| Status.ForceBuild;
|
|
|
|
/** @internal */
|
|
export namespace Status {
|
|
/**
|
|
* The project can't be built at all in its current state. For example,
|
|
* its config file cannot be parsed, or it has a syntax error or missing file
|
|
*/
|
|
export interface Unbuildable {
|
|
type: UpToDateStatusType.Unbuildable;
|
|
reason: string;
|
|
}
|
|
|
|
/**
|
|
* This project doesn't have any outputs, so "is it up to date" is a meaningless question.
|
|
*/
|
|
export interface ContainerOnly {
|
|
type: UpToDateStatusType.ContainerOnly;
|
|
}
|
|
|
|
/**
|
|
* The project is up to date with respect to its inputs.
|
|
* We track what the newest input file is.
|
|
*/
|
|
export interface UpToDate {
|
|
type:
|
|
| UpToDateStatusType.UpToDate
|
|
| UpToDateStatusType.UpToDateWithUpstreamTypes
|
|
| UpToDateStatusType.UpToDateWithInputFileText;
|
|
newestInputFileTime?: Date;
|
|
newestInputFileName?: string;
|
|
oldestOutputFileName: string;
|
|
}
|
|
|
|
/**
|
|
* One or more of the outputs of the project does not exist.
|
|
*/
|
|
export interface OutputMissing {
|
|
type: UpToDateStatusType.OutputMissing;
|
|
/**
|
|
* The name of the first output file that didn't exist
|
|
*/
|
|
missingOutputFileName: string;
|
|
}
|
|
|
|
/** Error reading file */
|
|
export interface ErrorReadingFile {
|
|
type: UpToDateStatusType.ErrorReadingFile;
|
|
fileName: string;
|
|
}
|
|
|
|
/**
|
|
* One or more of the project's outputs is older than its newest input.
|
|
*/
|
|
export interface OutOfDateWithSelf {
|
|
type: UpToDateStatusType.OutOfDateWithSelf;
|
|
outOfDateOutputFileName: string;
|
|
newerInputFileName: string;
|
|
}
|
|
|
|
/**
|
|
* Buildinfo indicates that build is out of date
|
|
*/
|
|
export interface OutOfDateBuildInfo {
|
|
type:
|
|
| UpToDateStatusType.OutOfDateBuildInfoWithPendingEmit
|
|
| UpToDateStatusType.OutOfDateBuildInfoWithErrors
|
|
| UpToDateStatusType.OutOfDateOptions;
|
|
buildInfoFile: string;
|
|
}
|
|
|
|
export interface OutOfDateRoots {
|
|
type: UpToDateStatusType.OutOfDateRoots;
|
|
buildInfoFile: string;
|
|
inputFile: Path;
|
|
}
|
|
|
|
/**
|
|
* This project depends on an out-of-date project, so shouldn't be built yet
|
|
*/
|
|
export interface UpstreamOutOfDate {
|
|
type: UpToDateStatusType.UpstreamOutOfDate;
|
|
upstreamProjectName: string;
|
|
}
|
|
|
|
/**
|
|
* This project depends an upstream project with build errors
|
|
*/
|
|
export interface UpstreamBlocked {
|
|
type: UpToDateStatusType.UpstreamBlocked;
|
|
upstreamProjectName: string;
|
|
upstreamProjectBlocked: boolean;
|
|
}
|
|
|
|
/**
|
|
* Computing status of upstream projects referenced
|
|
*/
|
|
export interface ComputingUpstream {
|
|
type: UpToDateStatusType.ComputingUpstream;
|
|
}
|
|
|
|
export interface TsVersionOutOfDate {
|
|
type: UpToDateStatusType.TsVersionOutputOfDate;
|
|
version: string;
|
|
}
|
|
|
|
/**
|
|
* One or more of the project's outputs is older than the newest output of
|
|
* an upstream project.
|
|
*/
|
|
export interface OutOfDateWithUpstream {
|
|
type: UpToDateStatusType.OutOfDateWithUpstream;
|
|
outOfDateOutputFileName: string;
|
|
newerProjectName: string;
|
|
}
|
|
|
|
export interface ForceBuild {
|
|
type: UpToDateStatusType.ForceBuild;
|
|
}
|
|
}
|
|
|
|
/** @internal */
|
|
export function resolveConfigFileProjectName(project: string): ResolvedConfigFileName {
|
|
if (fileExtensionIs(project, Extension.Json)) {
|
|
return project as ResolvedConfigFileName;
|
|
}
|
|
|
|
return combinePaths(project, "tsconfig.json") as ResolvedConfigFileName;
|
|
}
|