UNPKG

2.71 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.save = save;
7exports.load = load;
8exports.get = get;
9exports.setDirty = setDirty;
10exports.clear = clear;
11
12var _path = require("path");
13
14var _fs = require("fs");
15
16var _os = require("os");
17
18var babel = require("@babel/core");
19
20var _findCacheDir = require("find-cache-dir");
21
22const DEFAULT_CACHE_DIR = _findCacheDir({
23 name: "@babel/register"
24}) || _os.homedir() || _os.tmpdir();
25
26const DEFAULT_FILENAME = _path.join(DEFAULT_CACHE_DIR, `.babel.${babel.version}.${babel.getEnv()}.json`);
27
28const FILENAME = process.env.BABEL_CACHE_PATH || DEFAULT_FILENAME;
29let data = {};
30let cacheDirty = false;
31let cacheDisabled = false;
32
33function isCacheDisabled() {
34 var _process$env$BABEL_DI;
35
36 return (_process$env$BABEL_DI = process.env.BABEL_DISABLE_CACHE) != null ? _process$env$BABEL_DI : cacheDisabled;
37}
38
39function save() {
40 if (isCacheDisabled() || !cacheDirty) return;
41 cacheDirty = false;
42 let serialised = "{}";
43
44 try {
45 serialised = JSON.stringify(data, null, " ");
46 } catch (err) {
47 if (err.message === "Invalid string length") {
48 err.message = "Cache too large so it's been cleared.";
49 console.error(err.stack);
50 } else {
51 throw err;
52 }
53 }
54
55 try {
56 (((v, w) => (v = v.split("."), w = w.split("."), +v[0] > +w[0] || v[0] == w[0] && +v[1] >= +w[1]))(process.versions.node, "10.12") ? _fs.mkdirSync : require("make-dir").sync)(_path.dirname(FILENAME), {
57 recursive: true
58 });
59
60 _fs.writeFileSync(FILENAME, serialised);
61 } catch (e) {
62 switch (e.code) {
63 case "ENOENT":
64 case "EACCES":
65 case "EPERM":
66 console.warn(`Babel could not write cache to file: ${FILENAME}
67due to a permission issue. Cache is disabled.`);
68 cacheDisabled = true;
69 break;
70
71 case "EROFS":
72 console.warn(`Babel could not write cache to file: ${FILENAME}
73because it resides in a readonly filesystem. Cache is disabled.`);
74 cacheDisabled = true;
75 break;
76
77 default:
78 throw e;
79 }
80 }
81}
82
83function load() {
84 if (isCacheDisabled()) {
85 data = {};
86 return;
87 }
88
89 process.on("exit", save);
90 process.nextTick(save);
91 let cacheContent;
92
93 try {
94 cacheContent = _fs.readFileSync(FILENAME);
95 } catch (e) {
96 switch (e.code) {
97 case "EACCES":
98 console.warn(`Babel could not read cache file: ${FILENAME}
99due to a permission issue. Cache is disabled.`);
100 cacheDisabled = true;
101
102 default:
103 return;
104 }
105 }
106
107 try {
108 data = JSON.parse(cacheContent);
109 } catch (_unused) {}
110}
111
112function get() {
113 return data;
114}
115
116function setDirty() {
117 cacheDirty = true;
118}
119
120function clear() {
121 data = {};
122}
\No newline at end of file