UNPKG

makit

Version:

Make in JavaScript done right!

52 lines (51 loc) 1.67 kB
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; }