Skip to content

Commit 2f58d33

Browse files
author
Kelly Selden
committed
treat glimmer apps as default blueprints
1 parent df37308 commit 2f58d33

8 files changed

Lines changed: 144 additions & 31 deletions

File tree

src/index.js

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ const parseBlueprintPackage = require('./parse-blueprint-package');
1313
const downloadPackage = require('./download-package');
1414
const loadSafeBlueprintFile = require('./load-safe-blueprint-file');
1515
const saveBlueprint = require('./save-blueprint');
16-
const loadDefaultBlueprint = require('./load-default-blueprint');
16+
const loadDefaultBlueprintFromDisk = require('./load-default-blueprint-from-disk');
1717
const loadSafeBlueprint = require('./load-safe-blueprint');
1818
const stageBlueprintFile = require('./stage-blueprint-file');
1919
const { getBlueprintRelativeFilePath } = require('./get-blueprint-file-path');
@@ -111,7 +111,7 @@ module.exports = async function emberCliUpdate({
111111
let { blueprints } = emberCliUpdateJson;
112112

113113
if (!blueprints.length) {
114-
blueprint = loadDefaultBlueprint();
114+
blueprint = await loadDefaultBlueprintFromDisk(cwd, from);
115115
} else {
116116
let {
117117
areAllUpToDate,
@@ -186,15 +186,9 @@ module.exports = async function emberCliUpdate({
186186
}
187187

188188
let startBlueprint;
189-
190-
if (!isCustomBlueprint && createCustomDiff) {
191-
blueprint = loadDefaultBlueprint(projectOptions, blueprint.version);
192-
}
193-
194189
if (!reset) {
195190
startBlueprint = { ...blueprint };
196191
}
197-
198192
endBlueprint = { ...blueprint };
199193
delete endBlueprint.version;
200194

src/is-default-blueprint.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@
33
const {
44
defaultPackageName,
55
defaultAppBlueprintName,
6-
defaultAddonBlueprintName
6+
defaultAddonBlueprintName,
7+
glimmerPackageName
78
} = require('./constants');
89

910
function isDefaultBlueprint({ packageName, name }) {
11+
if (packageName === glimmerPackageName && name === glimmerPackageName) {
12+
return true;
13+
}
1014
return packageName === defaultPackageName && [
1115
defaultAppBlueprintName,
1216
defaultAddonBlueprintName

src/load-default-blueprint-from-disk.js

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,30 @@ const getPackageVersion = require('./get-package-version');
66
const getProjectVersion = require('./get-project-version');
77
const loadDefaultBlueprint = require('./load-default-blueprint');
88
const utils = require('./utils');
9+
const {
10+
defaultPackageName
11+
} = require('./constants');
912

10-
async function loadDefaultBlueprintFromDisk(cwd) {
11-
let packageJson = utils.require(path.join(cwd, 'package'));
13+
async function loadDefaultBlueprintFromDisk(cwd, version) {
14+
let packageJson;
15+
try {
16+
packageJson = utils.require(path.join(cwd, 'package'));
17+
} catch (err) {}
1218

13-
let projectOptions = await getProjectOptions(packageJson);
19+
let projectOptions;
1420

15-
let packageName = 'ember-cli';
16-
let packageVersion = getPackageVersion(packageJson, packageName);
21+
if (packageJson) {
22+
projectOptions = await getProjectOptions(packageJson);
1723

18-
let versions = await utils.getVersions(packageName);
24+
if (!projectOptions.includes('glimmer')) {
25+
let packageName = defaultPackageName;
26+
let packageVersion = getPackageVersion(packageJson, packageName);
1927

20-
let version = getProjectVersion(packageVersion, versions, projectOptions);
28+
let versions = await utils.getVersions(packageName);
29+
30+
version = getProjectVersion(packageVersion, versions, projectOptions);
31+
}
32+
}
2133

2234
let blueprint = loadDefaultBlueprint(projectOptions, version);
2335

src/load-default-blueprint.js

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,41 @@ const loadSafeBlueprint = require('./load-safe-blueprint');
44
const {
55
defaultPackageName,
66
defaultAppBlueprintName,
7-
defaultAddonBlueprintName
7+
defaultAddonBlueprintName,
8+
glimmerPackageName
89
} = require('./constants');
910

1011
function loadDefaultBlueprint(projectOptions = [], version) {
11-
let name = defaultAppBlueprintName;
12-
let codemodsSource = 'ember-app-codemods-manifest@1';
12+
let packageName = defaultPackageName;
13+
let name;
14+
let codemodsSource;
1315
if (projectOptions.includes('addon')) {
1416
name = defaultAddonBlueprintName;
1517
codemodsSource = 'ember-addon-codemods-manifest@1';
18+
} else if (projectOptions.includes('glimmer')) {
19+
packageName = glimmerPackageName;
20+
name = glimmerPackageName;
21+
} else {
22+
name = defaultAppBlueprintName;
23+
codemodsSource = 'ember-app-codemods-manifest@1';
1624
}
1725

1826
let options = [];
19-
if (projectOptions.includes('yarn')) {
20-
options.push('--yarn');
21-
}
22-
if (!projectOptions.includes('welcome') || projectOptions.includes('addon')) {
23-
// Why do addons always have --no-welcome?
24-
options.push('--no-welcome');
27+
if (!projectOptions.includes('glimmer')) {
28+
if (projectOptions.includes('yarn')) {
29+
options.push('--yarn');
30+
}
31+
if (!projectOptions.includes('welcome') || projectOptions.includes('addon')) {
32+
// Why do addons always have --no-welcome?
33+
options.push('--no-welcome');
34+
}
2535
}
2636

2737
return loadSafeBlueprint({
28-
packageName: defaultPackageName,
38+
packageName,
2939
name,
3040
version,
31-
codemodsSource,
41+
...codemodsSource ? { codemodsSource } : {},
3242
options,
3343
isBaseBlueprint: true
3444
});
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"schemaVersion": 0,
3+
"packages": [
4+
{
5+
"name": "@glimmer/blueprint",
6+
"version": "0.6.1",
7+
"blueprints": [
8+
{
9+
"name": "@glimmer/blueprint",
10+
"isBaseBlueprint": true
11+
}
12+
]
13+
}
14+
]
15+
}

test/integration/load-default-blueprint-test.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,4 +147,22 @@ describe(_loadDefaultBlueprint, function() {
147147
});
148148
});
149149
});
150+
151+
describe('glimmer', function() {
152+
beforeEach(function() {
153+
projectOptions.push('glimmer');
154+
});
155+
156+
it('works', async function() {
157+
let blueprint = loadDefaultBlueprint();
158+
159+
expect(blueprint).to.deep.equal({
160+
packageName: '@glimmer/blueprint',
161+
name: '@glimmer/blueprint',
162+
version,
163+
isBaseBlueprint: true,
164+
options: []
165+
});
166+
});
167+
});
150168
});

test/unit/is-default-blueprint-test.js

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,38 @@
33
const { describe, it } = require('../helpers/mocha');
44
const { expect } = require('../helpers/chai');
55
const isDefaultBlueprint = require('../../src/is-default-blueprint');
6+
const {
7+
defaultPackageName,
8+
defaultAppBlueprintName,
9+
defaultAddonBlueprintName,
10+
glimmerPackageName
11+
} = require('../../src/constants');
612

713
describe(isDefaultBlueprint, function() {
8-
it('detects default blueprint', function() {
14+
it('detects default app blueprint', function() {
915
expect(isDefaultBlueprint({
10-
packageName: 'ember-cli',
11-
name: 'app'
16+
packageName: defaultPackageName,
17+
name: defaultAppBlueprintName
18+
})).to.be.true;
19+
});
20+
21+
it('detects default addon blueprint', function() {
22+
expect(isDefaultBlueprint({
23+
packageName: defaultPackageName,
24+
name: defaultAddonBlueprintName
25+
})).to.be.true;
26+
});
27+
28+
it('detects glimmer blueprint', function() {
29+
expect(isDefaultBlueprint({
30+
packageName: glimmerPackageName,
31+
name: glimmerPackageName
1232
})).to.be.true;
1333
});
1434

1535
it('detects custom blueprint', function() {
1636
expect(isDefaultBlueprint({
17-
packageName: 'ember-cli',
37+
packageName: defaultPackageName,
1838
name: 'custom-blueprint'
1939
})).to.be.false;
2040
});

test/unit/load-default-blueprint-from-file-test.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,46 @@ describe(loadDefaultBlueprintFromDisk, function() {
2020
sinon.restore();
2121
});
2222

23+
it('handles missing package.json', async function() {
24+
require = require.withArgs(path.normalize('/test/path/package')).throws();
25+
26+
let blueprint = await loadDefaultBlueprintFromDisk('/test/path', '0.0.1');
27+
28+
expect(require).to.be.calledOnce;
29+
expect(getVersions).to.not.be.called;
30+
31+
expect(blueprint).to.deep.equal({
32+
packageName: 'ember-cli',
33+
name: 'app',
34+
version: '0.0.1',
35+
codemodsSource: 'ember-app-codemods-manifest@1',
36+
isBaseBlueprint: true,
37+
options: ['--no-welcome']
38+
});
39+
});
40+
41+
it('handles glimmer app', async function() {
42+
require = require.withArgs(path.normalize('/test/path/package')).returns({
43+
devDependencies: {
44+
'@glimmer/blueprint': '',
45+
'ember-cli': '0.0.1'
46+
}
47+
});
48+
49+
let blueprint = await loadDefaultBlueprintFromDisk('/test/path', '0.0.2');
50+
51+
expect(require).to.be.calledOnce;
52+
expect(getVersions).to.not.be.called;
53+
54+
expect(blueprint).to.deep.equal({
55+
packageName: '@glimmer/blueprint',
56+
name: '@glimmer/blueprint',
57+
version: '0.0.2',
58+
isBaseBlueprint: true,
59+
options: []
60+
});
61+
});
62+
2363
it('works', async function() {
2464
require = require.withArgs(path.normalize('/test/path/package')).returns({
2565
devDependencies: {

0 commit comments

Comments
 (0)