1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.DefaultStatePersistence = void 0;
|
4 | const tslib_1 = require("tslib");
|
5 | const inversify_1 = require("inversify");
|
6 | const cached_file_system_1 = require("../cached-file-system");
|
7 | const debug = require("debug");
|
8 | const yaml = require("js-yaml");
|
9 | const log = debug('wotan:statePersistence');
|
10 | const CACHE_VERSION = 1;
|
11 | let DefaultStatePersistence = class DefaultStatePersistence {
|
12 | constructor(fs) {
|
13 | this.fs = fs;
|
14 | }
|
15 | loadState(project) {
|
16 | const fileName = buildFilename(project);
|
17 | if (!this.fs.isFile(fileName))
|
18 | return;
|
19 | try {
|
20 | log("Loading cache from '%s'", fileName);
|
21 | const content = yaml.load(this.fs.readFile(fileName));
|
22 | if ((content === null || content === void 0 ? void 0 : content.v) !== CACHE_VERSION) {
|
23 | log("Version mismatch: expected '%s', actual: '%s'", CACHE_VERSION, content === null || content === void 0 ? void 0 : content.v);
|
24 | return;
|
25 | }
|
26 | return content.state;
|
27 | }
|
28 | catch {
|
29 | log("Error loading cache '%s'", fileName);
|
30 | return;
|
31 | }
|
32 | }
|
33 | saveState(project, state) {
|
34 | const fileName = buildFilename(project);
|
35 | log("Writing cache '%s'", fileName);
|
36 | try {
|
37 | const content = { state, v: CACHE_VERSION };
|
38 | this.fs.writeFile(fileName, yaml.dump(content, { indent: 2, sortKeys: true }));
|
39 | }
|
40 | catch {
|
41 | log("Error writing cache '%s'", fileName);
|
42 | }
|
43 | }
|
44 | };
|
45 | DefaultStatePersistence = tslib_1.__decorate([
|
46 | inversify_1.injectable(),
|
47 | tslib_1.__metadata("design:paramtypes", [cached_file_system_1.CachedFileSystem])
|
48 | ], DefaultStatePersistence);
|
49 | exports.DefaultStatePersistence = DefaultStatePersistence;
|
50 | function buildFilename(tsconfigPath) {
|
51 | return tsconfigPath.replace(/.[^.]+$/, '.fimbullintercache');
|
52 | }
|
53 |
|
\ | No newline at end of file |