Skip to content

Commit e0d196e

Browse files
authored
Merge pull request #1036 from bertdeblock/dont-use-ember-cli-project-instance-outside-of-ember-cli-commands
Don't use ember-cli `project` instance outside of ember-cli commands
2 parents 8618294 + 951a41e commit e0d196e

File tree

15 files changed

+91
-74
lines changed

15 files changed

+91
-74
lines changed

lib/commands/config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ module.exports = {
1212
async run(commandOptions) {
1313
debug('Options:\n', commandOptions);
1414

15+
let cwd = this.project.root;
1516
let config = await require('../utils/config')({
16-
project: this.project,
1717
configPath: commandOptions.configPath,
18+
cwd,
1819
});
1920

2021
log(JSON.stringify(config, null, 2));

lib/commands/reset.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ module.exports = {
66
works: 'insideProject',
77

88
async run() {
9-
let config = await require('../utils/config')({ project: this.project });
9+
let cwd = this.project.root;
10+
let config = await require('../utils/config')({ cwd });
1011
let ResetTask = require('../tasks/reset');
1112

1213
let resetTask = new ResetTask({
13-
project: this.project,
1414
config,
15+
cwd,
1516
});
1617

1718
return await resetTask.run();

lib/commands/try-each.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,17 @@ module.exports = {
1818
async run(commandOptions) {
1919
debug('Options:\n', commandOptions);
2020

21+
let cwd = this.project.root;
2122
let config = await this._getConfig({
22-
project: this.project,
2323
configPath: commandOptions.configPath,
24+
cwd,
2425
});
2526

2627
debug('Config: %s', JSON.stringify(config));
2728

2829
let tryEachTask = new this._TryEachTask({
29-
project: this.project,
3030
config,
31+
cwd,
3132
});
3233

3334
return await tryEachTask.run(config.scenarios, { skipCleanup: commandOptions.skipCleanup });

lib/commands/try-ember.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@ module.exports = {
2424
debug('Options:\n', commandOptions);
2525
debug('Ember semver statement', emberVersion);
2626

27+
let cwd = this.project.root;
2728
let config = await this._getConfig({
28-
project: this.project,
2929
configPath: commandOptions.configPath,
30+
cwd,
3031
versionCompatibility: {
3132
ember: emberVersion,
3233
},
@@ -35,8 +36,8 @@ module.exports = {
3536
debug('Config: %s', JSON.stringify(config));
3637

3738
let tryEachTask = new this._TryEachTask({
38-
project: this.project,
3939
config,
40+
cwd,
4041
});
4142

4243
return await tryEachTask.run(config.scenarios, { skipCleanup: commandOptions.skipCleanup });

lib/commands/try-one.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,10 @@ module.exports = {
4242
throw new Error('The `ember try:one` command requires a ' + 'scenario name to be specified.');
4343
}
4444

45+
let cwd = this.project.root;
4546
let config = await this._getConfig({
46-
project: this.project,
4747
configPath: commandOptions.configPath,
48+
cwd,
4849
});
4950

5051
debug('Config: %s', JSON.stringify(config));
@@ -57,9 +58,9 @@ module.exports = {
5758
}
5859

5960
let tryEachTask = new this._TryEachTask({
60-
project: this.project,
61-
config,
6261
commandArgs,
62+
config,
63+
cwd,
6364
});
6465

6566
return await tryEachTask.run([scenario], { skipCleanup: commandOptions.skipCleanup });

lib/tasks/reset.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ const DependencyManagerAdapterFactory = require('./../utils/dependency-manager-a
77
module.exports = class ResetTask {
88
constructor(options) {
99
this.config = options.config;
10-
this.project = options.project;
10+
this.cwd = options.cwd;
1111
}
1212

1313
run() {
1414
let dependencyAdapters = DependencyManagerAdapterFactory.generateFromConfig(
1515
this.config,
16-
this.project.root,
16+
this.cwd,
1717
);
1818
debug(
1919
'DependencyManagerAdapters: %s',

lib/tasks/try-each.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ module.exports = class TryEachTask {
99
this.commandArgs = options.commandArgs;
1010
this.commandOptions = options.commandOptions;
1111
this.config = options.config;
12+
this.cwd = options.cwd;
1213
this.dependencyManagerAdapters = options.dependencyManagerAdapters;
13-
this.project = options.project;
1414
}
1515

1616
async run(scenarios, options) {
@@ -21,7 +21,7 @@ module.exports = class TryEachTask {
2121

2222
let dependencyManagerAdapters =
2323
this.dependencyManagerAdapters ||
24-
DependencyManagerAdapterFactory.generateFromConfig(this.config, this.project.root);
24+
DependencyManagerAdapterFactory.generateFromConfig(this.config, this.cwd);
2525
debug(
2626
'DependencyManagerAdapters: %s',
2727
dependencyManagerAdapters.map((item) => {
@@ -134,7 +134,7 @@ module.exports = class TryEachTask {
134134
}
135135

136136
_runCommand(options) {
137-
return runCommand(this.project.root, options.commandArgs, options.commandOptions);
137+
return runCommand(this.cwd, options.commandArgs, options.commandOptions);
138138
}
139139

140140
_commandOptions(env) {

lib/utils/config.js

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ const fs = require('fs');
55
const { prefix, warn } = require('./console');
66
const debug = require('debug')('ember-try:utils:config');
77

8-
function getConfigPath(project) {
8+
function getConfigPath(cwd) {
9+
let packageFile = readPackageFile(cwd);
910
let possibleConfigPath;
10-
if (project.pkg && project.pkg['ember-addon'] && project.pkg['ember-addon']['configPath']) {
11-
let configDir = project.pkg['ember-addon']['configPath'];
1211

13-
possibleConfigPath = path.join(configDir, 'ember-try.js');
12+
if (packageFile['ember-addon']?.['configPath']) {
13+
possibleConfigPath = path.join(packageFile['ember-addon']['configPath'], 'ember-try.js');
1414
}
1515

1616
if (fs.existsSync(possibleConfigPath)) {
@@ -25,8 +25,8 @@ function getConfigPath(project) {
2525
}
2626

2727
async function getBaseConfig(options) {
28-
let relativeConfigPath = options.configPath || getConfigPath(options.project);
29-
let configPath = path.join(options.project.root, relativeConfigPath);
28+
let relativeConfigPath = options.configPath || getConfigPath(options.cwd);
29+
let configPath = path.join(options.cwd, relativeConfigPath);
3030
let data;
3131

3232
if (fs.existsSync(configPath)) {
@@ -42,14 +42,13 @@ async function getBaseConfig(options) {
4242
}
4343

4444
let versionCompatibility =
45-
options.versionCompatibility || versionCompatibilityFromPackageJSON(options.project.root);
45+
options.versionCompatibility || versionCompatibilityFromPackageJSON(options.cwd);
4646
if (versionCompatibility) {
4747
// Required lazily to improve startup speed.
4848
let autoScenarioConfigForEmber = require('ember-try-config');
4949

5050
let autoConfig = await autoScenarioConfigForEmber({
5151
versionCompatibility,
52-
project: options.project,
5352
});
5453
return await mergeAutoConfigAndConfigFileData(autoConfig, data);
5554
} else {
@@ -103,11 +102,18 @@ function mergeAutoConfigAndConfigFileData(autoConfig, configData) {
103102
return conf;
104103
}
105104

106-
function versionCompatibilityFromPackageJSON(root) {
107-
let packageJSONFile = path.join(root, 'package.json');
108-
if (fs.existsSync(packageJSONFile)) {
109-
let packageJSON = JSON.parse(fs.readFileSync(packageJSONFile));
105+
function versionCompatibilityFromPackageJSON(cwd) {
106+
let packageFile = readPackageFile(cwd);
110107

111-
return packageJSON['ember-addon'] ? packageJSON['ember-addon'].versionCompatibility : null;
108+
return packageFile['ember-addon']?.versionCompatibility ?? null;
109+
}
110+
111+
function readPackageFile(cwd) {
112+
let packageFile = path.join(cwd, 'package.json');
113+
114+
if (fs.existsSync(packageFile)) {
115+
return JSON.parse(fs.readFileSync(packageFile));
116+
} else {
117+
return {};
112118
}
113119
}

lib/utils/dependency-manager-adapter-factory.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const WorkspaceAdapter = require('../dependency-manager-adapters/workspace');
66
const YarnAdapter = require('../dependency-manager-adapters/yarn');
77

88
module.exports = {
9-
generateFromConfig(config, root) {
9+
generateFromConfig(config, cwd) {
1010
let hasNpm = false;
1111
let adapters = [];
1212
if (!config || !config.scenarios) {
@@ -22,7 +22,7 @@ module.exports = {
2222
if (config.useWorkspaces) {
2323
adapters.push(
2424
new WorkspaceAdapter({
25-
cwd: root,
25+
cwd,
2626
managerOptions: config.npmOptions,
2727
packageManager: config.packageManager,
2828
buildManagerOptions: config.buildManagerOptions,
@@ -31,23 +31,23 @@ module.exports = {
3131
} else if (config.packageManager === 'pnpm') {
3232
adapters.push(
3333
new PnpmAdapter({
34-
cwd: root,
34+
cwd,
3535
managerOptions: config.npmOptions,
3636
buildManagerOptions: config.buildManagerOptions,
3737
}),
3838
);
3939
} else if (config.packageManager === 'yarn') {
4040
adapters.push(
4141
new YarnAdapter({
42-
cwd: root,
42+
cwd,
4343
managerOptions: config.npmOptions,
4444
buildManagerOptions: config.buildManagerOptions,
4545
}),
4646
);
4747
} else if (hasNpm) {
4848
adapters.push(
4949
new NpmAdapter({
50-
cwd: root,
50+
cwd,
5151
managerOptions: config.npmOptions,
5252
buildManagerOptions: config.buildManagerOptions,
5353
}),

test/commands/try-each-test.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ describe('commands/try-each', () => {
1212
MockTryEachTask.prototype.run = function () {};
1313

1414
beforeEach(() => {
15+
TryEachCommand.project = { root: '' };
16+
1517
TryEachCommand._getConfig = function () {
1618
return Promise.resolve(mockConfig || { scenarios: [] });
1719
};
@@ -20,6 +22,8 @@ describe('commands/try-each', () => {
2022
});
2123

2224
afterEach(() => {
25+
delete TryEachCommand.project;
26+
2327
TryEachCommand._TryEachTask = origTryEachTask;
2428
TryEachCommand._getConfig = origGetConfig;
2529
mockConfig = null;

0 commit comments

Comments
 (0)