-
Notifications
You must be signed in to change notification settings - Fork 176
/
Copy pathconfig.js
75 lines (65 loc) · 1.77 KB
/
config.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
const fs = require("fs-extra");
const path = require("path");
const url = require("url");
const { get } = require("lodash");
const moduleLoader = require('../utils/module-loader');
const DEFAULT_CONFIG_FILE_NAME = "migrate-mongo-config.js";
let customConfigContent = null;
function getConfigPath() {
const fileOptionValue = get(global.options, "file");
if (!fileOptionValue) {
return path.join(process.cwd(), DEFAULT_CONFIG_FILE_NAME);
}
if (path.isAbsolute(fileOptionValue)) {
return fileOptionValue;
}
return path.join(process.cwd(), fileOptionValue);
}
module.exports = {
DEFAULT_CONFIG_FILE_NAME,
set(configContent) {
customConfigContent = configContent
},
async shouldExist() {
if (!customConfigContent) {
const configPath = getConfigPath();
try {
await fs.stat(configPath);
} catch (err) {
throw new Error(`config file does not exist: ${configPath}`);
}
}
},
async shouldNotExist() {
if (!customConfigContent) {
const configPath = getConfigPath();
const error = new Error(`config file already exists: ${configPath}`);
try {
await fs.stat(configPath);
throw error;
} catch (err) {
if (err.code !== "ENOENT") {
throw error;
}
}
}
},
getConfigFilename() {
return path.basename(getConfigPath());
},
async read() {
if (customConfigContent) {
return customConfigContent;
}
const configPath = getConfigPath();
try {
return await Promise.resolve(moduleLoader.require(configPath));
} catch (e) {
if (e.code === 'ERR_REQUIRE_ESM') {
const loadedImport = await moduleLoader.import(url.pathToFileURL(configPath));
return loadedImport.default
}
throw e;
}
}
};