-
-
Notifications
You must be signed in to change notification settings - Fork 57
Expand file tree
/
Copy pathconfig.js
More file actions
129 lines (97 loc) · 3.53 KB
/
config.js
File metadata and controls
129 lines (97 loc) · 3.53 KB
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
'use strict';
const path = require('path');
const fs = require('fs');
const { prefix, warn } = require('./console');
const debug = require('debug')('ember-try:utils:config');
function getConfigPath(cwd) {
let packageFile = readPackageFile(cwd);
let possibleConfigPath;
if (packageFile['ember-addon']?.['configPath']) {
possibleConfigPath = path.join(packageFile['ember-addon']['configPath'], 'ember-try.js');
}
if (fs.existsSync(possibleConfigPath)) {
debug(`using config from package.json ember-addon.configPath: ${possibleConfigPath}`);
return possibleConfigPath;
}
let cjsPath = path.join('config', 'ember-try.cjs');
if (fs.existsSync(cjsPath)) {
debug(`using config from config/ember-try.cjs`);
return cjs;
}
debug('using config from config/ember-try.js');
return path.join('config', 'ember-try.js');
}
async function getBaseConfig(options) {
let relativeConfigPath = options.configPath || getConfigPath(options.cwd);
let configPath = path.join(options.cwd, relativeConfigPath);
let data;
if (fs.existsSync(configPath)) {
let configData = await require(configPath);
data = typeof configData === 'function' ? await configData() : configData;
} else {
debug('Config file does not exist %s', configPath);
}
if (data && data.scenarios && !data.useVersionCompatibility && !options.versionCompatibility) {
return data;
}
let versionCompatibility =
options.versionCompatibility || versionCompatibilityFromPackageJSON(options.cwd);
if (versionCompatibility) {
// Required lazily to improve startup speed.
let autoScenarioConfigForEmber = require('ember-try-config');
let autoConfig = await autoScenarioConfigForEmber({
versionCompatibility,
});
return await mergeAutoConfigAndConfigFileData(autoConfig, data);
} else {
throw new Error(
'No ember-try configuration found. Please see the README for configuration options'
);
}
}
async function config(options) {
const configData = await getBaseConfig(options);
for (const packageManager of [
['pnpm', 'usePnpm'],
['yarn', 'useYarn'],
]) {
const [name, oldOption] = packageManager;
if (typeof configData[oldOption] === 'boolean') {
warn(
`${prefix(
'ember-try DEPRECATION'
)} The \`${oldOption}\` config option is deprecated. Please use \`packageManager: '${name}'\` instead.`
);
delete configData[oldOption];
configData.packageManager = name;
}
}
return configData;
}
module.exports = config;
function mergeAutoConfigAndConfigFileData(autoConfig, configData) {
configData = configData || {};
configData.scenarios = configData.scenarios || [];
let conf = Object.assign({}, autoConfig, configData);
let overriddenScenarios = autoConfig.scenarios.map((scenario) => {
let overriddenScenario = configData.scenarios.find((s) => s.name === scenario.name);
return Object.assign({}, scenario, overriddenScenario);
});
let additionalScenarios = configData.scenarios.filter((scenario) => {
return !autoConfig.scenarios.find((s) => s.name === scenario.name);
});
conf.scenarios = [...overriddenScenarios, ...additionalScenarios];
return conf;
}
function versionCompatibilityFromPackageJSON(cwd) {
let packageFile = readPackageFile(cwd);
return packageFile['ember-addon']?.versionCompatibility ?? null;
}
function readPackageFile(cwd) {
let packageFile = path.join(cwd, 'package.json');
if (fs.existsSync(packageFile)) {
return JSON.parse(fs.readFileSync(packageFile));
} else {
return {};
}
}