@@ -11,17 +11,46 @@ const overwriteBlueprintFiles = require('./overwrite-blueprint-files');
1111const debug = require ( './debug' ) ;
1212const npm = require ( 'boilerplate-update/src/npm' ) ;
1313const mutatePackageJson = require ( 'boilerplate-update/src/mutate-package-json' ) ;
14- const { glimmerPackageName } = require ( './constants' ) ;
14+ const {
15+ glimmerPackageName,
16+ defaultAddonPackageName,
17+ defaultAppPackageName
18+ } = require ( './constants' ) ;
1519const hasYarn = require ( './has-yarn' ) ;
1620
1721const nodeModulesIgnore = `
1822
1923/node_modules/
2024` ;
2125
22- // remove when node 8 is dropped
23- const lastNode8Version = '3.16' ;
26+ /**
27+ * @typedef {Object } StartAndEndCommandsResult
28+ * @property {string } projectName
29+ * @property {string } packageName - Always 'ember-cli'
30+ * @property {string } commandName - Always 'ember'
31+ * @property {Function } createProjectFromCache - Function to create project from cache
32+ * @property {Function } createProjectFromRemote - Function to create project from remote
33+ * @property {Object } startOptions - Start configuration options
34+ * @property {Object } startOptions.baseBlueprint - Base blueprint for start
35+ * @property {Object } startOptions.blueprint - Blueprint for start
36+ * @property {string } startOptions.packageRange - Package range for start
37+ * @property {Object } endOptions - End configuration options
38+ * @property {Object } endOptions.baseBlueprint - Base blueprint for end
39+ * @property {Object } endOptions.blueprint - Blueprint for end
40+ * @property {string } endOptions.packageRange - Package range for end
41+ */
2442
43+ /**
44+ * Creates start and end commands configuration for ember-cli-update process
45+ *
46+ * @param {Object } params - Configuration parameters
47+ * @param {Object } params.packageJson - The package.json object of the project
48+ * @param {Object } [params.baseBlueprint] - Base blueprint configuration object
49+ * @param {Object } [params.startBlueprint] - Starting blueprint configuration object
50+ * @param {Object } params.endBlueprint - Target blueprint configuration object
51+ * @param {Object } [params.emberCliUpdateJson] - ember-cli-update.json configuration object
52+ * @returns {StartAndEndCommandsResult } Configuration object with project details and command options
53+ */
2554module . exports = function getStartAndEndCommands ( {
2655 packageJson,
2756 baseBlueprint,
@@ -54,21 +83,19 @@ module.exports = function getStartAndEndCommands({
5483 endBlueprint . packageName === glimmerPackageName &&
5584 endBlueprint . name === glimmerPackageName ;
5685
57- let startRange ;
58- let endRange ;
86+ // first version that supports blueprints with versions `-b [email protected] ` 87+ // https://github.com/ember-cli/ember-cli/pull/8571
88+ let startRange = `>=3.11.0-beta.1` ;
89+ let endRange = startRange ;
90+
5991 if ( ! isCustomBlueprint && ! isGlimmer ) {
60- startRange = startBlueprint && startBlueprint . version ;
92+ startRange = startBlueprint ? .version ;
6193 endRange = endBlueprint . version ;
6294 } else if (
6395 ! endBlueprint . isBaseBlueprint &&
6496 isDefaultBlueprint ( baseBlueprint )
6597 ) {
6698 startRange = endRange = baseBlueprint . version ;
67- } else {
68- // first version that supports blueprints with versions
69- 70- // https://github.com/ember-cli/ember-cli/pull/8571
71- startRange = endRange = `>=3.11.0-beta.1 <${ lastNode8Version } ` ;
7299 }
73100
74101 return {
@@ -97,22 +124,29 @@ module.exports = function getStartAndEndCommands({
97124async function isDefaultAddonBlueprint ( blueprint ) {
98125 let isCustomBlueprint = ! isDefaultBlueprint ( blueprint ) ;
99126
100- let isDefaultAddonBlueprint ;
127+ if ( blueprint . packageName === defaultAppPackageName ) {
128+ return false ;
129+ }
130+
131+ if ( blueprint . packageName === defaultAddonPackageName ) {
132+ return true ;
133+ }
101134
102135 if ( isCustomBlueprint ) {
103- let keywords ;
136+ let keywords = [ ] ;
137+
104138 if ( blueprint . path ) {
105139 keywords = utils . require ( path . join ( blueprint . path , 'package' ) ) . keywords ;
106140 } else {
107- keywords = await npm . json ( 'v' , blueprint . packageName , 'keywords' ) ;
141+ let packageInfo = await npm . json ( 'v' , blueprint . packageName ) ;
142+
143+ keywords = packageInfo . keywords ?? [ ] ;
108144 }
109145
110- isDefaultAddonBlueprint = ! (
111- keywords && keywords . includes ( 'ember-blueprint' )
112- ) ;
146+ return ! keywords . includes ( 'ember-blueprint' ) ;
113147 }
114148
115- return isDefaultAddonBlueprint ;
149+ return false ;
116150}
117151
118152function getArgs ( { projectName, directoryName, blueprint } ) {
0 commit comments