/
api.ts
120 lines (112 loc) · 2.67 KB
/
api.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import { Writable } from "stream";
import { EOL } from "os";
import { createConfig, Config } from "backfill-config";
import {
Logger,
makeLogger as makeLoggerInternal,
Console,
LogLevel,
} from "backfill-logger";
import { Hasher } from "backfill-hasher";
import { getCacheStorageProvider } from "backfill-cache";
function makeConsole(stdout: Writable, stderr: Writable): Console {
return {
info(...args: string[]): void {
stdout.write(args.join(" ") + EOL);
},
warn(...args: string[]): void {
stderr.write(args.join(" ") + EOL);
},
error(...args: string[]): void {
stderr.write(args.join(" ") + EOL);
},
};
}
export function makeLogger(
logLevel: LogLevel,
stdout: Writable,
stderr: Writable
): Logger {
return makeLoggerInternal(logLevel, { console: makeConsole(stdout, stderr) });
}
export async function computeHash(
cwd: string,
logger: Logger,
hashSalt?: string,
config?: Pick<Config, "packageRoot">
): Promise<string> {
if (!config) {
config = createConfig(logger, cwd);
}
const { packageRoot } = config;
const hasher = new Hasher({ packageRoot }, logger);
const hash = await hasher.createPackageHash(hashSalt || "");
return hash;
}
export async function computeHashOfOutput(
cwd: string,
logger: Logger,
config?: Pick<Config, "packageRoot">
): Promise<string> {
if (!config) {
config = createConfig(logger, cwd);
}
const { packageRoot } = config;
const hasher = new Hasher({ packageRoot }, logger);
const hash = await hasher.hashOfOutput();
return hash;
}
export async function fetch(
cwd: string,
hash: string,
logger: Logger,
config?: Pick<
Config,
"cacheStorageConfig" | "internalCacheFolder" | "incrementalCaching"
>
): Promise<boolean> {
if (!config) {
config = createConfig(logger, cwd);
}
const { cacheStorageConfig, internalCacheFolder, incrementalCaching } =
config;
const cacheStorage = getCacheStorageProvider(
cacheStorageConfig,
internalCacheFolder,
logger,
cwd,
incrementalCaching
);
const fetch = await cacheStorage.fetch(hash);
return fetch;
}
export async function put(
cwd: string,
hash: string,
logger: Logger,
config?: Pick<
Config,
| "cacheStorageConfig"
| "internalCacheFolder"
| "outputGlob"
| "incrementalCaching"
>
): Promise<void> {
if (!config) {
config = createConfig(logger, cwd);
}
const {
cacheStorageConfig,
internalCacheFolder,
outputGlob,
incrementalCaching,
} = config;
const cacheStorage = getCacheStorageProvider(
cacheStorageConfig,
internalCacheFolder,
logger,
cwd,
incrementalCaching
);
await cacheStorage.put(hash, outputGlob);
}