-
Notifications
You must be signed in to change notification settings - Fork 3
/
config-overrides.js
103 lines (94 loc) · 3.5 KB
/
config-overrides.js
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
const exec = require('child_process').exec;
const CopyPlugin = require("copy-webpack-plugin");
const {IgnorePlugin} = require("webpack");
module.exports = {
webpack: function (config, env) {
config.resolve.fallback = config.resolve.fallback ?? {};
config.resolve.fallback['path'] = false;
config.resolve.fallback['util'] = false;
config.plugins.push(
{
// TODO: do not run this if the only changed files in dev mode are css
apply: (compiler) => {
compiler.hooks.watchRun.tap('CompileLiburryYaml', (comp) => {
if (comp.modifiedFiles) {
const changedFiles = Array.from(comp.modifiedFiles);
const requireChangeFiles = changedFiles.filter((filename) =>
!(
filename.includes('src/generated/') ||
filename.endsWith('.css')
)
);
if (requireChangeFiles.length < 1) {
return;
}
}
if (process.env.BYPASS_YAML === "1") {
return;
}
// This is run here to allow yaml configs to be recompiled in dev mode. There's an initial run in
// "prebuild" in package.json which is necessary for the assets to be included in builds.
// The typescript compilation is unchecked, since the ts files in question are typechecked
// during our normal builds and not re-checking them saves ~6 seconds per run.
exec('yarn run ts-node src/scripts/compileYaml.ts', (err, stdout, stderr) => {
if (stdout) process.stdout.write(stdout);
if (stderr) process.stderr.write(stderr);
if (err) {
console.error("====== YAML COMPILATION FAILED ======");
if (process.env.NODE_ENV === "development") {
console.error(err);
} else {
throw err;
}
}
});
});
}
},
);
config.plugins.push(new CopyPlugin(
{
// TODO: find a better way to watch yml files
patterns: [{
from: "src/config/**/*.yml",
to: "yaml_was_watched",
// transformAll: (assets) => {
// const out = {};
// assets.forEach((ass) => {
// const idChain = ass.sourceFilename.split('src/config/')[1].split('/');
// const idc = [...idChain];
// let targ = out;
// while (idc.length > 1) {
// const id = idc.shift();
// if (!(id in targ)) {
// targ[id] = {};
// }
// targ = targ[id];
// }
// const filename = idc.shift();
// targ[filename] = yaml.parse(ass.data.toString());
// });
//return JSON.stringify(out);
//}
}]
}
));
config.plugins.push(new IgnorePlugin(
{resourceRegExp: /^fs$/}
));
return config;
},
jest: function (config) {
return config;
},
devServer: function (configFunction) {
return function (proxy, allowedHost) {
const config = configFunction(proxy, allowedHost);
//config.watchFiles = [...(config.watchFiles ?? []), "src/config/**/*.yml"];
return config;
};
},
paths: function (paths, env) {
return paths;
},
}