ember-cli 3.28.1 → 4.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/.github/workflows/ci.yml +4 -0
  2. package/CHANGELOG.md +70 -0
  3. package/README.md +1 -1
  4. package/blueprints/addon/additional-dev-dependencies.json +1 -1
  5. package/blueprints/addon/files/.github/workflows/ci.yml +73 -0
  6. package/blueprints/addon/files/.travis.yml +1 -1
  7. package/blueprints/addon/files/addon-config/ember-try.js +3 -0
  8. package/blueprints/addon/files/npmignore +4 -0
  9. package/blueprints/addon/index.js +14 -5
  10. package/blueprints/app/files/.eslintignore +3 -0
  11. package/blueprints/app/files/.eslintrc.js +1 -1
  12. package/blueprints/app/files/.github/workflows/ci.yml +41 -0
  13. package/blueprints/app/files/.prettierignore +4 -0
  14. package/blueprints/app/files/config/targets.js +0 -15
  15. package/blueprints/app/files/gitignore +3 -0
  16. package/blueprints/app/files/package.json +15 -16
  17. package/blueprints/app/index.js +23 -2
  18. package/docs/build/classes/Addon.html +1 -1
  19. package/docs/build/classes/AmdTransformAddon.html +1 -1
  20. package/docs/build/classes/Blueprint.html +1 -1
  21. package/docs/build/classes/Builder.html +1 -1
  22. package/docs/build/classes/CLI.html +1 -1
  23. package/docs/build/classes/Command.html +1 -1
  24. package/docs/build/classes/DefaultPackager.html +1 -1
  25. package/docs/build/classes/EmberAddon.html +39 -39
  26. package/docs/build/classes/EmberApp.html +39 -39
  27. package/docs/build/classes/HardwareInfo.html +1 -1
  28. package/docs/build/classes/HistorySupportAddon.html +1 -1
  29. package/docs/build/classes/Instrumentation.html +1 -1
  30. package/docs/build/classes/NodeModulesList.html +1 -1
  31. package/docs/build/classes/NpmTask.html +4 -4
  32. package/docs/build/classes/PackageInfo.html +1 -1
  33. package/docs/build/classes/PackageInfoCache.html +1 -1
  34. package/docs/build/classes/PerBundleAddonCache {.html +1 -1
  35. package/docs/build/classes/Project.html +1 -1
  36. package/docs/build/classes/ServeFilesAddon.html +1 -1
  37. package/docs/build/classes/TestsServerAddon.html +1 -1
  38. package/docs/build/classes/WatcherAddon.html +1 -1
  39. package/docs/build/classes/WindowsSymlinkChecker.html +1 -1
  40. package/docs/build/data.json +36 -36
  41. package/docs/build/files/lib_broccoli_default-packager.js.html +1 -1
  42. package/docs/build/files/lib_broccoli_ember-addon.js.html +1 -1
  43. package/docs/build/files/lib_broccoli_ember-app.js.html +63 -21
  44. package/docs/build/files/lib_cli_cli.js.html +1 -1
  45. package/docs/build/files/lib_models_addon-info.js.html +1 -1
  46. package/docs/build/files/lib_models_addon.js.html +1 -1
  47. package/docs/build/files/lib_models_blueprint.js.html +5 -5
  48. package/docs/build/files/lib_models_builder.js.html +1 -1
  49. package/docs/build/files/lib_models_command.js.html +1 -1
  50. package/docs/build/files/lib_models_hardware-info.js.html +1 -1
  51. package/docs/build/files/lib_models_host-info-cache.js.html +1 -1
  52. package/docs/build/files/lib_models_installation-checker.js.html +1 -1
  53. package/docs/build/files/lib_models_instantiate-addons.js.html +1 -1
  54. package/docs/build/files/lib_models_instrumentation.js.html +1 -1
  55. package/docs/build/files/lib_models_package-info-cache_index.js.html +1 -1
  56. package/docs/build/files/lib_models_package-info-cache_node-modules-list.js.html +1 -1
  57. package/docs/build/files/lib_models_package-info-cache_package-info.js.html +1 -1
  58. package/docs/build/files/lib_models_per-bundle-addon-cache_addon-proxy.js.html +1 -1
  59. package/docs/build/files/lib_models_per-bundle-addon-cache_index.js.html +1 -1
  60. package/docs/build/files/lib_models_per-bundle-addon-cache_target-instance.js.html +1 -1
  61. package/docs/build/files/lib_models_project.js.html +1 -1
  62. package/docs/build/files/lib_models_task.js.html +1 -1
  63. package/docs/build/files/lib_tasks_build-watch.js.html +1 -1
  64. package/docs/build/files/lib_tasks_npm-task.js.html +134 -46
  65. package/docs/build/files/lib_tasks_serve.js.html +1 -1
  66. package/docs/build/files/lib_tasks_server_middleware_broccoli-serve-files_index.js.html +1 -1
  67. package/docs/build/files/lib_tasks_server_middleware_broccoli-watcher_index.js.html +1 -1
  68. package/docs/build/files/lib_tasks_server_middleware_history-support_index.js.html +1 -1
  69. package/docs/build/files/lib_tasks_server_middleware_tests-server_index.js.html +1 -1
  70. package/docs/build/files/lib_tasks_test-server.js.html +1 -1
  71. package/docs/build/files/lib_tasks_transforms_amd_index.js.html +1 -1
  72. package/docs/build/files/lib_utilities_ember-app-utils.js.html +1 -1
  73. package/docs/build/files/lib_utilities_insert-into-file.js.html +1 -1
  74. package/docs/build/files/lib_utilities_is-lazy-engine.js.html +1 -1
  75. package/docs/build/files/lib_utilities_is-yarn-project.js.html +1 -1
  76. package/docs/build/files/lib_utilities_valid-project-name.js.html +1 -1
  77. package/docs/build/files/lib_utilities_will-interrupt-process.js.html +1 -1
  78. package/docs/build/files/lib_utilities_windows-admin.js.html +1 -1
  79. package/docs/build/index.html +2 -2
  80. package/docs/build/modules/ember-cli.html +2 -2
  81. package/docs/build/modules/is-lazy-engine.html +1 -1
  82. package/docs/perf-guide.md +2 -0
  83. package/lib/broccoli/ember-app.js +62 -20
  84. package/lib/commands/addon.js +6 -0
  85. package/lib/commands/init.js +9 -1
  86. package/lib/commands/install.js +9 -1
  87. package/lib/commands/new.js +6 -0
  88. package/lib/models/blueprint.js +4 -4
  89. package/lib/tasks/addon-install.js +10 -1
  90. package/lib/tasks/generate-from-blueprint.js +0 -1
  91. package/lib/tasks/install-blueprint.js +1 -1
  92. package/lib/tasks/npm-install.js +2 -2
  93. package/lib/tasks/npm-task.js +133 -45
  94. package/lib/tasks/npm-uninstall.js +2 -2
  95. package/package.json +2 -2
  96. package/tests/helpers/dist-checker.js +21 -1
  97. package/tests/helpers/ember.js +2 -2
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -86,6 +86,7 @@
86
86
 
87
87
  const chalk = require(&#x27;chalk&#x27;);
88
88
  const execa = require(&#x27;../utilities/execa&#x27;);
89
+ const findUp = require(&#x27;find-up&#x27;);
89
90
  const semver = require(&#x27;semver&#x27;);
90
91
  const SilentError = require(&#x27;silent-error&#x27;);
91
92
  const isYarnProject = require(&#x27;../utilities/is-yarn-project&#x27;);
@@ -110,6 +111,10 @@ class NpmTask extends Task {
110
111
  this.versionConstraints = &#x27;3 || 4 || 5 || 6&#x27;;
111
112
  }
112
113
 
114
+ get packageManagerOutputName() {
115
+ return this.packageManager.name;
116
+ }
117
+
113
118
  npm(args) {
114
119
  logger.info(&#x27;npm: %j&#x27;, args);
115
120
  return execa(&#x27;npm&#x27;, args, { preferLocal: false });
@@ -120,10 +125,19 @@ class NpmTask extends Task {
120
125
  return execa(&#x27;yarn&#x27;, args, { preferLocal: false });
121
126
  }
122
127
 
128
+ pnpm(args) {
129
+ logger.info(&#x27;pnpm: %j&#x27;, args);
130
+ return execa(&#x27;pnpm&#x27;, args, { preferLocal: false });
131
+ }
132
+
123
133
  hasYarnLock() {
124
134
  return isYarnProject(this.project.root);
125
135
  }
126
136
 
137
+ async hasPNPMLock() {
138
+ return Boolean(await findUp(&#x27;pnpm-lock.yaml&#x27;, { cwd: this.project.root }));
139
+ }
140
+
127
141
  async checkYarn() {
128
142
  try {
129
143
  let result = await this.yarn([&#x27;--version&#x27;]);
@@ -136,9 +150,7 @@ class NpmTask extends Task {
136
150
  logger.info(&#x27;yarn --version: %s&#x27;, version);
137
151
  }
138
152
 
139
- this.useYarn = true;
140
-
141
- return { yarnVersion: version };
153
+ return { name: &#x27;yarn&#x27;, version };
142
154
  } catch (error) {
143
155
  logger.error(&#x27;yarn --version failed: %s&#x27;, error);
144
156
 
@@ -153,6 +165,28 @@ class NpmTask extends Task {
153
165
  }
154
166
  }
155
167
 
168
+ async checkPNPM() {
169
+ try {
170
+ let result = await this.pnpm([&#x27;--version&#x27;]);
171
+ let version = result.stdout;
172
+
173
+ logger.info(&#x27;pnpm --version: %s&#x27;, version);
174
+
175
+ return { name: &#x27;pnpm&#x27;, version };
176
+ } catch (error) {
177
+ logger.error(&#x27;pnpm --version failed: %s&#x27;, error);
178
+
179
+ if (error.code === &#x27;ENOENT&#x27;) {
180
+ throw new SilentError(
181
+ &#x27;Ember CLI is now using pnpm, but was not able to find it.\n&#x27; +
182
+ &#x27;Please install pnpm using the instructions at https://pnpm.io/installation&#x27;
183
+ );
184
+ }
185
+
186
+ throw error;
187
+ }
188
+ }
189
+
156
190
  async checkNpmVersion() {
157
191
  try {
158
192
  let result = await this.npm([&#x27;--version&#x27;]);
@@ -177,7 +211,7 @@ class NpmTask extends Task {
177
211
  );
178
212
  }
179
213
 
180
- return { npmVersion: version };
214
+ return { name: &#x27;npm&#x27;, version };
181
215
  } catch (error) {
182
216
  logger.error(&#x27;npm --version failed: %s&#x27;, error);
183
217
 
@@ -206,37 +240,55 @@ class NpmTask extends Task {
206
240
  * @method findPackageManager
207
241
  * @return {Promise}
208
242
  */
209
- async findPackageManager() {
210
- if (this.useYarn === true) {
243
+ async findPackageManager(packageManager = null) {
244
+ if (packageManager === &#x27;yarn&#x27;) {
211
245
  logger.info(&#x27;yarn requested -&gt; trying yarn&#x27;);
212
246
  return this.checkYarn();
213
247
  }
214
248
 
215
- if (this.useYarn === false) {
249
+ if (packageManager === &#x27;npm&#x27;) {
216
250
  logger.info(&#x27;npm requested -&gt; using npm&#x27;);
217
251
  return this.checkNpmVersion();
218
252
  }
219
253
 
220
- if (!this.hasYarnLock()) {
221
- logger.info(&#x27;yarn.lock not found -&gt; using npm&#x27;);
222
- return this.checkNpmVersion();
254
+ if (packageManager === &#x27;pnpm&#x27;) {
255
+ logger.info(&#x27;pnpm requested -&gt; using pnpm&#x27;);
256
+ return this.checkPNPM();
223
257
  }
224
258
 
225
- logger.info(&#x27;yarn.lock found -&gt; trying yarn&#x27;);
226
- try {
227
- const yarnResult = await this.checkYarn();
228
- logger.info(&#x27;yarn found -&gt; using yarn&#x27;);
229
- return yarnResult;
230
- } catch (_err) {
231
- logger.info(&#x27;yarn not found -&gt; using npm&#x27;);
232
- return this.checkNpmVersion();
259
+ if (this.hasYarnLock()) {
260
+ logger.info(&#x27;yarn.lock found -&gt; trying yarn&#x27;);
261
+ try {
262
+ const yarnResult = await this.checkYarn();
263
+ logger.info(&#x27;yarn found -&gt; using yarn&#x27;);
264
+ return yarnResult;
265
+ } catch (_err) {
266
+ logger.info(&#x27;yarn not found&#x27;);
267
+ }
268
+ } else {
269
+ logger.info(&#x27;yarn.lock not found&#x27;);
270
+ }
271
+
272
+ if (this.hasPNPMLock()) {
273
+ logger.info(&#x27;pnpm-lock.yaml found -&gt; trying pnpm&#x27;);
274
+ try {
275
+ let result = await this.checkPNPM();
276
+ logger.info(&#x27;pnpm found -&gt; using pnpm&#x27;);
277
+ return result;
278
+ } catch (_err) {
279
+ logger.info(&#x27;pnpm not found&#x27;);
280
+ }
281
+ } else {
282
+ logger.info(&#x27;pnpm-lock.yaml not found&#x27;);
233
283
  }
284
+
285
+ logger.info(&#x27;using npm&#x27;);
286
+ return this.checkNpmVersion();
234
287
  }
235
288
 
236
289
  async run(options) {
237
- this.useYarn = options.useYarn;
290
+ this.packageManager = await this.findPackageManager(options.packageManager);
238
291
 
239
- let result = await this.findPackageManager();
240
292
  let ui = this.ui;
241
293
  let startMessage = this.formatStartMessage(options.packages);
242
294
  let completeMessage = this.formatCompleteMessage(options.packages);
@@ -247,31 +299,37 @@ class NpmTask extends Task {
247
299
  ui.writeLine(prependEmoji(&#x27;🚧&#x27;, &#x27;Installing packages... This might take a couple of minutes.&#x27;));
248
300
  ui.startProgress(chalk.green(startMessage));
249
301
 
250
- let promise;
251
- if (this.useYarn) {
252
- this.yarnVersion = result.yarnVersion;
253
- let args = this.toYarnArgs(this.command, options);
254
- promise = this.yarn(args);
255
- } else {
256
- let args = this.toNpmArgs(this.command, options);
257
- promise = this.npm(args);
258
-
259
- // as of 2018-10-09 npm 5 and 6 _break_ the hierarchy of &#x60;node_modules&#x60;
260
- // after a &#x60;npm install foo&#x60; (deletes files/folders other than
261
- // what was directly installed) in some circumstances, see:
262
- //
263
- // * https://github.com/npm/npm/issues/16853
264
- // * https://github.com/npm/npm/issues/17379
265
- //
266
- // this ensures that we run a full &#x60;npm install&#x60; **after** any &#x60;npm
267
- // install foo&#x60; runs to ensure that we have a fully functional
268
- // node_modules hierarchy
269
- if (result.npmVersion &amp;&amp; semver.lt(result.npmVersion, &#x27;5.7.1&#x27;)) {
270
- promise = promise.then(() =&gt; this.npm([&#x27;install&#x27;]));
302
+ try {
303
+ if (this.packageManager.name === &#x27;yarn&#x27;) {
304
+ let args = this.toYarnArgs(this.command, options);
305
+ await this.yarn(args);
306
+ } else if (this.packageManager.name === &#x27;pnpm&#x27;) {
307
+ let args = this.toPNPMArgs(this.command, options);
308
+ await this.pnpm(args);
309
+ } else {
310
+ let args = this.toNpmArgs(this.command, options);
311
+ await this.npm(args);
312
+
313
+ // as of 2018-10-09 npm 5 and 6 _break_ the hierarchy of &#x60;node_modules&#x60;
314
+ // after a &#x60;npm install foo&#x60; (deletes files/folders other than
315
+ // what was directly installed) in some circumstances, see:
316
+ //
317
+ // * https://github.com/npm/npm/issues/16853
318
+ // * https://github.com/npm/npm/issues/17379
319
+ //
320
+ // this ensures that we run a full &#x60;npm install&#x60; **after** any &#x60;npm
321
+ // install foo&#x60; runs to ensure that we have a fully functional
322
+ // node_modules hierarchy
323
+ let npmVersion = this.packageManager.version;
324
+ if (npmVersion &amp;&amp; semver.lt(npmVersion, &#x27;5.7.1&#x27;)) {
325
+ await this.npm([&#x27;install&#x27;]);
326
+ }
271
327
  }
328
+ } finally {
329
+ ui.stopProgress();
272
330
  }
273
331
 
274
- return promise.finally(() =&gt; ui.stopProgress()).then(() =&gt; ui.writeLine(chalk.green(completeMessage)));
332
+ ui.writeLine(chalk.green(completeMessage));
275
333
  }
276
334
 
277
335
  toNpmArgs(command, options) {
@@ -294,9 +352,9 @@ class NpmTask extends Task {
294
352
  }
295
353
 
296
354
  if (options.verbose) {
297
- args.push(&#x27;--loglevel verbose&#x27;);
355
+ args.push(&#x27;--loglevel&#x27;, &#x27;verbose&#x27;);
298
356
  } else {
299
- args.push(&#x27;--loglevel error&#x27;);
357
+ args.push(&#x27;--loglevel&#x27;, &#x27;error&#x27;);
300
358
  }
301
359
 
302
360
  if (options.packages) {
@@ -344,13 +402,43 @@ class NpmTask extends Task {
344
402
  // Yarn v2 defaults to non-interactive
345
403
  // with an optional -i flag
346
404
 
347
- if (semver.lt(this.yarnVersion, &#x27;2.0.0&#x27;)) {
405
+ if (semver.lt(this.packageManager.version, &#x27;2.0.0&#x27;)) {
348
406
  args.push(&#x27;--non-interactive&#x27;);
349
407
  }
350
408
 
351
409
  return args;
352
410
  }
353
411
 
412
+ toPNPMArgs(command, options) {
413
+ let args = [];
414
+
415
+ if (command === &#x27;install&#x27;) {
416
+ if (options.save) {
417
+ args.push(&#x27;add&#x27;);
418
+ } else if (options[&#x27;save-dev&#x27;]) {
419
+ args.push(&#x27;add&#x27;, &#x27;--save-dev&#x27;);
420
+ } else if (options.packages) {
421
+ throw new Error(&#x60;npm command &quot;${command} ${options.packages.join(&#x27; &#x27;)}&quot; can not be translated to pnpm command&#x60;);
422
+ } else {
423
+ args.push(&#x27;install&#x27;);
424
+ }
425
+
426
+ if (options[&#x27;save-exact&#x27;]) {
427
+ args.push(&#x27;--save-exact&#x27;);
428
+ }
429
+ } else if (command === &#x27;uninstall&#x27;) {
430
+ args.push(&#x27;remove&#x27;);
431
+ } else {
432
+ throw new Error(&#x60;npm command &quot;${command}&quot; can not be translated to pnpm command&#x60;);
433
+ }
434
+
435
+ if (options.packages) {
436
+ args = args.concat(options.packages);
437
+ }
438
+
439
+ return args;
440
+ }
441
+
354
442
  formatStartMessage(/* packages */) {
355
443
  return &#x27;&#x27;;
356
444
  }
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -107,7 +107,7 @@ the in-depth documentation.</p>
107
107
  <p>Please see the <a href="https://github.com/ember-cli/ember-cli/blob/master/CONTRIBUTING.md">contributing guidelines</a></p>
108
108
  <h2>Community</h2>
109
109
  <ul>
110
- <li>Discord: <a href="https://discordapp.com/invite/zT3asNS">Get your invite</a></li>
110
+ <li>Discord: <a href="https://discord.gg/emberjs">Get your invite</a></li>
111
111
  <li>Issues: <a href="https://github.com/ember-cli/ember-cli/issues">ember-cli/issues</a></li>
112
112
  <li>Documentation: <a href="https://cli.emberjs.com/release/">ember-cli.com</a></li>
113
113
  </ul>
@@ -96,14 +96,14 @@
96
96
 
97
97
 
98
98
  <div class="version-info">
99
- Version: 3.28.1-release-15b9b49441
99
+ Version: 4.0.0-beta.2-beta-6d064ff49f
100
100
  </div>
101
101
 
102
102
  </div>
103
103
 
104
104
  <div id="main" class="yui3-u">
105
105
  <div class="content"><div class="title">
106
- <span class="source-link"><a href="../files/lib_tasks_npm-task.js.html#l16"><code>lib&#x2F;tasks&#x2F;npm-task.js:16</code></a></span>
106
+ <span class="source-link"><a href="../files/lib_tasks_npm-task.js.html#l17"><code>lib&#x2F;tasks&#x2F;npm-task.js:17</code></a></span>
107
107
  <h1 class="module-name">ember-cli</h1>
108
108
  </div>
109
109
 
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <div class="version-info">
72
- Version: 3.28.1-release-15b9b49441
72
+ Version: 4.0.0-beta.2-beta-6d064ff49f
73
73
  </div>
74
74
 
75
75
  </div>
@@ -238,6 +238,8 @@ To generate visualization:
238
238
 
239
239
 
240
240
  Each build will generate an additional graph, `instrumentation.build.<build-number>.json`
241
+
242
+ Alternatively, you can upload the JSON file to https://heimdalljs.github.io/heimdalljs-visualizer/
241
243
 
242
244
  #### in-depth look
243
245