makit
Version:
Make in JavaScript done right!
52 lines (51 loc) • 1.67 kB
TypeScript
import { TimeStamp } from './time-stamp';
import { DataBase } from '../db';
import { FileSystem } from './file-system';
/**
* 表示文件不存在,时间戳设为最旧。让它和它的依赖处于 stale 状态。
*/
export declare const MTIME_NOT_EXIST: TimeStamp;
export declare const MTIME_EMPTY_DEPENDENCY: TimeStamp;
/**
* 文件 mtime 的抽象
*
* 由于文件系统时间和 Node.js 的 Date API 不一致,
* 会影响判断一个 target 是否 stale。
* GNU Make 的 recipe 是独立进程而 makit 中是本地过程调用因此问题严重。
* 一些实现细节:
*
* * mtime 使用正整数实现,特殊值取负数和 Infinity。
* * 按 makit 第一次获知文件的顺序初始化 mtime。
* * 同时提供 mtime 和严格递增的 now(),确保 now 和 mtime 一致。
*/
export declare class MTime {
private readonly db;
private readonly fs;
private static instance;
constructor(db: DataBase, fs: FileSystem);
/**
* 获取严格递增的当前时间戳
*
* @return 严格递增的当前时间戳
*/
now(): TimeStamp;
/**
* 设置文件修改时间,不传则设置为现在
*
* @param fullpath 文件全路径
* @param time 时间戳
*/
setModifiedTime(fullpath: string, time?: TimeStamp): TimeStamp;
/**
* 获取文件修改时间
*
* @param fullpath 文件全路径
* @return 时间戳的 Promise
*/
getModifiedTime(fullpath: string): TimeStamp;
private getModifiedTimeFromFileSystem;
/**
* 简单的校验,就可以不依赖数据库的并发一致性。
*/
private queryAndValidate;
}