UNPKG

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