ember-cli 5.12.0 → 6.0.0

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # ember-cli Changelog
2
2
 
3
+ ## v6.0.0
4
+
5
+ #### Blueprint Changes
6
+
7
+ - [`ember new` diff](https://github.com/ember-cli/ember-new-output/compare/v5.12.0...v6.0.0)
8
+ - [`ember addon` diff](https://github.com/ember-cli/ember-addon-output/compare/v5.12.0...v6.0.0)
9
+
10
+ #### Changelog
11
+
12
+ - [#10559](https://github.com/ember-cli/ember-cli/pull/10559) [ENHANCEMENT] Make deprecations throw when the `until` for `ember-cli` has passed [@kategengler](https://github.com/kategengler)
13
+ - [#10453](https://github.com/ember-cli/ember-cli/pull/10453) [ENHANCEMENT] Allow specifying no CI provider [@deanylev](https://github.com/deanylev)
14
+ - [#10505](https://github.com/ember-cli/ember-cli/pull/10505) use our fork of remove-types with config: false [@mansona](https://github.com/mansona)
15
+ - [#10506](https://github.com/ember-cli/ember-cli/pull/10506) [ENHANCEMENT] Use the official types in the blueprints [@Windvis](https://github.com/Windvis)
16
+ - [#10507](https://github.com/ember-cli/ember-cli/pull/10507) Official types in blueprints amendments [@Windvis](https://github.com/Windvis)
17
+
18
+ Thank you to all who took the time to contribute!
19
+
3
20
  ## v5.12.0
4
21
 
5
22
  #### Blueprint Changes
@@ -14,5 +14,8 @@
14
14
  "<%= addonName %>/test-support/*": ["addon-test-support/*"],
15
15
  "*": ["types/*"]
16
16
  }
17
- }
17
+ },
18
+ "types": [
19
+ "ember-source/types"
20
+ ]
18
21
  }
@@ -69,12 +69,12 @@ module.exports = {
69
69
  delete contents.devDependencies['ember-cli-htmlbars'];
70
70
 
71
71
  // 95% of addons don't need ember-data or ember-fetch, make them opt-in instead
72
- delete contents.devDependencies['ember-data'];
73
- delete contents.devDependencies['@types/ember-data'];
74
- delete contents.devDependencies['@types/ember-data__adapter'];
75
- delete contents.devDependencies['@types/ember-data__model'];
76
- delete contents.devDependencies['@types/ember-data__serializer'];
77
- delete contents.devDependencies['@types/ember-data__store'];
72
+ let deps = Object.keys(contents.devDependencies);
73
+ for (let depName of deps) {
74
+ if (depName.includes('ember-data') || depName.includes('warp-drive')) {
75
+ delete contents.devDependencies[depName];
76
+ }
77
+ }
78
78
  delete contents.devDependencies['ember-fetch'];
79
79
 
80
80
  // `@ember/string` is a peer dependency of `ember-data`.
@@ -206,13 +206,17 @@ module.exports = {
206
206
  },
207
207
 
208
208
  files(options) {
209
- let appFiles = this.lookupBlueprint(this.appBlueprintName)
210
- .files(options)
211
- .filter((file) => !['types/ember-data/types/registries/model.d.ts'].includes(file));
209
+ let appFiles = this.lookupBlueprint(this.appBlueprintName).files(options);
212
210
  let addonFilesPath = this.filesPath(this.options);
213
- let ignoredCITemplate = this.options.ciProvider !== 'travis' ? '.travis.yml' : '.github';
211
+ let ignore = [];
212
+ if (this.options.ciProvider !== 'travis') {
213
+ ignore.push('.travis.yml');
214
+ }
215
+ if (this.options.ciProvider !== 'github') {
216
+ ignore.push('.github');
217
+ }
214
218
 
215
- let addonFiles = walkSync(addonFilesPath, { ignore: [ignoredCITemplate] });
219
+ let addonFiles = walkSync(addonFilesPath, { ignore });
216
220
 
217
221
  if (options.packageManager !== 'pnpm') {
218
222
  addonFiles = addonFiles.filter((file) => !file.endsWith('.npmrc'));
@@ -26,53 +26,38 @@
26
26
  "test:ember": "ember test"
27
27
  },
28
28
  "devDependencies": {
29
- "@babel/core": "^7.25.2",
30
- "<% if (!typescript) { %>@babel/eslint-parser": "^7.25.1",
31
- "@babel/plugin-proposal-decorators": "^7.24.7",
32
- "<% } %>@ember/optional-features": "^2.1.0",
29
+ "@babel/core": "^7.26.0<% if (!typescript) { %>",
30
+ "@babel/eslint-parser": "^7.25.9",
31
+ "@babel/plugin-proposal-decorators": "^7.25.9<% } %><% if (typescript) { %>",
32
+ "@ember-data/adapter": "~5.4.0-beta.12",
33
+ "@ember-data/graph": "~5.4.0-beta.12",
34
+ "@ember-data/json-api": "~5.4.0-beta.12",
35
+ "@ember-data/legacy-compat": "~5.4.0-beta.12",
36
+ "@ember-data/model": "~5.4.0-beta.12",
37
+ "@ember-data/request": "~5.4.0-beta.12",
38
+ "@ember-data/request-utils": "~5.4.0-beta.12",
39
+ "@ember-data/serializer": "~5.4.0-beta.12",
40
+ "@ember-data/store": "~5.4.0-beta.12",
41
+ "@ember-data/tracking": "~5.4.0-beta.12<% } %>",
42
+ "@ember/optional-features": "^2.2.0",
33
43
  "@ember/string": "^4.0.0",
34
44
  "@ember/test-helpers": "^3.3.1<% if (embroider) { %>",
35
- "@embroider/compat": "^3.6.1",
36
- "@embroider/core": "^3.4.16",
37
- "@embroider/webpack": "^4.0.5<% } %>",
45
+ "@embroider/compat": "^3.7.0",
46
+ "@embroider/core": "^3.4.19",
47
+ "@embroider/webpack": "^4.0.8<% } %>",
38
48
  "@glimmer/component": "^1.1.2",
39
49
  "@glimmer/tracking": "^1.1.2<% if (typescript) { %>",
40
- "@glint/environment-ember-loose": "^1.4.0",
41
- "@glint/template": "^1.4.0",
50
+ "@glint/environment-ember-loose": "^1.5.0",
51
+ "@glint/template": "^1.5.0",
42
52
  "@tsconfig/ember": "^3.0.8",
43
- "@types/ember": "^4.0.11",
44
- "@types/ember-data": "^4.4.16",
45
- "@types/ember-data__adapter": "^4.0.6",
46
- "@types/ember-data__model": "^4.0.5",
47
- "@types/ember-data__serializer": "^4.0.6",
48
- "@types/ember-data__store": "^4.0.7",
49
- "@types/ember__application": "^4.0.11",
50
- "@types/ember__array": "^4.0.10",
51
- "@types/ember__component": "^4.0.22",
52
- "@types/ember__controller": "^4.0.12",
53
- "@types/ember__debug": "^4.0.8",
54
- "@types/ember__destroyable": "^4.0.5",
55
- "@types/ember__engine": "^4.0.11",
56
- "@types/ember__error": "^4.0.6",
57
- "@types/ember__helper": "^4.0.8",
58
- "@types/ember__modifier": "^4.0.9",
59
- "@types/ember__object": "^4.0.12",
60
- "@types/ember__owner": "^4.0.9",
61
- "@types/ember__polyfills": "^4.0.6",
62
- "@types/ember__routing": "^4.0.22",
63
- "@types/ember__runloop": "^4.0.10",
64
- "@types/ember__service": "^4.0.9",
65
- "@types/ember__string": "^3.16.3",
66
- "@types/ember__template": "^4.0.7",
67
- "@types/ember__test": "^4.0.6",
68
- "@types/ember__utils": "^4.0.7",
69
- "@types/qunit": "^2.19.10",
53
+ "@types/qunit": "^2.19.12",
70
54
  "@types/rsvp": "^4.0.9",
71
55
  "@typescript-eslint/eslint-plugin": "^7.18.0",
72
- "@typescript-eslint/parser": "^7.18.0<% } %>",
56
+ "@typescript-eslint/parser": "^7.18.0",
57
+ "@warp-drive/core-types": "~0.0.0-beta.12<% } %>",
73
58
  "broccoli-asset-rev": "^3.0.0",
74
59
  "concurrently": "^8.2.2",
75
- "ember-auto-import": "^2.8.1",
60
+ "ember-auto-import": "^2.10.0",
76
61
  "ember-cli": "~<%= emberCLIVersion %>",
77
62
  "ember-cli-app-version": "^7.0.0",
78
63
  "ember-cli-babel": "^8.2.0",
@@ -82,32 +67,32 @@
82
67
  "ember-cli-inject-live-reload": "^2.1.0<% if (!embroider) { %>",
83
68
  "ember-cli-sri": "^2.1.1",
84
69
  "ember-cli-terser": "^4.0.2<% } %>",
85
- "ember-data": "~5.3.8",
70
+ "ember-data": "~5.3.9",
86
71
  "ember-fetch": "^8.1.2",
87
72
  "ember-load-initializers": "^2.1.2",
88
73
  "ember-modifier": "^4.2.0",
89
74
  "ember-page-title": "^8.2.3",
90
- "ember-qunit": "^8.1.0",
75
+ "ember-qunit": "^8.1.1",
91
76
  "ember-resolver": "^12.0.1",
92
- "ember-source": "~5.12.0",
77
+ "ember-source": "~6.0.0",
93
78
  "ember-template-lint": "^6.0.0<% if (welcome) { %>",
94
79
  "ember-welcome-page": "^7.0.2<% } %>",
95
80
  "eslint": "^8.57.1",
96
81
  "eslint-config-prettier": "^9.1.0",
97
- "eslint-plugin-ember": "^12.2.1",
82
+ "eslint-plugin-ember": "^12.3.1",
98
83
  "eslint-plugin-n": "^16.6.2",
99
84
  "eslint-plugin-prettier": "^5.2.1",
100
85
  "eslint-plugin-qunit": "^8.1.2",
101
86
  "loader.js": "^4.7.0",
102
87
  "prettier": "^3.3.3",
103
88
  "qunit": "^2.22.0",
104
- "qunit-dom": "^3.2.1",
89
+ "qunit-dom": "^3.3.0",
105
90
  "stylelint": "^15.11.0",
106
91
  "stylelint-config-standard": "^34.0.0",
107
92
  "stylelint-prettier": "^4.1.0",
108
93
  "tracked-built-ins": "^3.3.0<% if (typescript) { %>",
109
- "typescript": "^5.6.2<% } %>",
110
- "webpack": "^5.95.0"
94
+ "typescript": "^5.6.3<% } %>",
95
+ "webpack": "^5.96.1"
111
96
  },
112
97
  "engines": {
113
98
  "node": ">= 18"
@@ -9,6 +9,21 @@
9
9
  "<%= name %>/tests/*": ["tests/*"],
10
10
  "<%= name %>/*": ["app/*"],
11
11
  "*": ["types/*"]
12
- }
12
+ },
13
+ "types": [
14
+ "ember-source/types",
15
+ "./node_modules/ember-data/unstable-preview-types",
16
+ "./node_modules/@ember-data/store/unstable-preview-types",
17
+ "./node_modules/@ember-data/adapter/unstable-preview-types",
18
+ "./node_modules/@ember-data/graph/unstable-preview-types",
19
+ "./node_modules/@ember-data/json-api/unstable-preview-types",
20
+ "./node_modules/@ember-data/legacy-compat/unstable-preview-types",
21
+ "./node_modules/@ember-data/request/unstable-preview-types",
22
+ "./node_modules/@ember-data/request-utils/unstable-preview-types",
23
+ "./node_modules/@ember-data/model/unstable-preview-types",
24
+ "./node_modules/@ember-data/serializer/unstable-preview-types",
25
+ "./node_modules/@ember-data/tracking/unstable-preview-types",
26
+ "./node_modules/@warp-drive/core-types/unstable-preview-types"
27
+ ]
13
28
  }
14
29
  }
@@ -90,7 +90,9 @@ module.exports = {
90
90
  let files = this._super();
91
91
  if (options.ciProvider !== 'travis') {
92
92
  files = files.filter((file) => file !== '.travis.yml');
93
- } else {
93
+ }
94
+
95
+ if (options.ciProvider !== 'github') {
94
96
  files = files.filter((file) => file.indexOf('.github') < 0);
95
97
  }
96
98
 
@@ -9,7 +9,7 @@ const p = require('ember-cli-preprocess-registry/preprocessors');
9
9
  const chalk = require('chalk');
10
10
  const resolve = require('resolve');
11
11
 
12
- const { assert, deprecate } = require('../debug');
12
+ const { assert, deprecate, DEPRECATIONS } = require('../debug');
13
13
  const Project = require('../models/project');
14
14
 
15
15
  const concat = require('broccoli-concat');
@@ -226,15 +226,7 @@ class EmberApp {
226
226
  deprecate(
227
227
  'Using the `outputPaths` build option is deprecated, as output paths will no longer be predetermined under Embroider.',
228
228
  typeof options.outputPaths === 'undefined',
229
- {
230
- for: 'ember-cli',
231
- id: 'ember-cli.outputPaths-build-option',
232
- since: {
233
- available: '5.3.0',
234
- enabled: '5.3.0',
235
- },
236
- until: '6.0.0',
237
- }
229
+ DEPRECATIONS.DEPRECATE_OUTPUT_PATHS.options
238
230
  );
239
231
 
240
232
  let resolvePathFor = (defaultPath, specified) => {
@@ -26,9 +26,9 @@ module.exports = NewCommand.extend({
26
26
  },
27
27
  {
28
28
  name: 'ci-provider',
29
- type: ['travis', 'github'],
29
+ type: ['travis', 'github', 'none'],
30
30
  default: 'github',
31
- description: 'Installs the default CI blueprint. Either Travis or Github Actions is supported.',
31
+ description: 'Installs the optional default CI blueprint. Either Travis or Github Actions is supported.',
32
32
  },
33
33
  { name: 'typescript', type: Boolean, default: false, description: 'Set up the addon to use TypeScript' },
34
34
  ],
@@ -9,7 +9,7 @@ const normalizeBlueprint = require('../utilities/normalize-blueprint-option');
9
9
  const mergeBlueprintOptions = require('../utilities/merge-blueprint-options');
10
10
  const { isPnpmProject, isYarnProject } = require('../utilities/package-managers');
11
11
  const getLangArg = require('../../lib/utilities/get-lang-arg');
12
- const { deprecate } = require('../debug');
12
+ const { deprecate, DEPRECATIONS } = require('../debug');
13
13
 
14
14
  module.exports = Command.extend({
15
15
  name: 'init',
@@ -42,9 +42,9 @@ module.exports = Command.extend({
42
42
  { name: 'embroider', type: Boolean, default: false, description: 'Enables the build system to use Embroider' },
43
43
  {
44
44
  name: 'ci-provider',
45
- type: ['travis', 'github'],
45
+ type: ['travis', 'github', 'none'],
46
46
  default: 'github',
47
- description: 'Installs the default CI blueprint. Either Travis or Github Actions is supported.',
47
+ description: 'Installs the optional default CI blueprint. Either Travis or Github Actions is supported.',
48
48
  },
49
49
  { name: 'typescript', type: Boolean, default: false, description: 'Set up the app to use TypeScript' },
50
50
  ],
@@ -126,16 +126,7 @@ module.exports = Command.extend({
126
126
  deprecate(
127
127
  'Support for generating a Travis CI config file is deprecated.\nYou can keep using Travis CI, or you could also consider switching to GitHub Actions instead.',
128
128
  false,
129
- {
130
- for: 'ember-cli',
131
- id: 'travis-ci-support',
132
- since: {
133
- available: '5.5.0',
134
- enabled: '5.5.0',
135
- },
136
- until: '6.0.0',
137
- url: 'https://deprecations.emberjs.com/id/travis-ci-support',
138
- }
129
+ DEPRECATIONS.DEPRECATE_TRAVIS_CI_SUPPORT.options
139
130
  );
140
131
  }
141
132
 
@@ -39,8 +39,8 @@ module.exports = Command.extend({
39
39
  { name: 'embroider', type: Boolean, default: false, description: 'Enables the build system to use Embroider' },
40
40
  {
41
41
  name: 'ci-provider',
42
- type: ['travis', 'github'],
43
- description: 'Installs the default CI blueprint. Either Travis or Github Actions is supported.',
42
+ type: ['travis', 'github', 'none'],
43
+ description: 'Installs the optional default CI blueprint. Either Travis or Github Actions is supported.',
44
44
  },
45
45
  {
46
46
  name: 'interactive',
@@ -3,6 +3,7 @@
3
3
  const chalk = require('chalk');
4
4
  const semver = require('semver');
5
5
  const assert = require('./assert');
6
+ const emberCLIVersion = require('../../package').version;
6
7
 
7
8
  /**
8
9
  * Display a deprecation message.
@@ -71,6 +72,12 @@ function deprecate(description, condition, options) {
71
72
  return;
72
73
  }
73
74
 
75
+ if (options.for === 'ember-cli' && isDeprecationRemoved(options.until)) {
76
+ throw new Error(
77
+ `The API deprecated by ${options.id} was removed in ember-cli ${options.until}. The message was: ${description}. Please see ${options.url} for more details.`
78
+ );
79
+ }
80
+
74
81
  let message = formatMessage(description, options);
75
82
 
76
83
  warn(message);
@@ -117,4 +124,12 @@ function warn(message) {
117
124
  console.warn(chalk.yellow(message));
118
125
  }
119
126
 
127
+ function isDeprecationRemoved(until) {
128
+ const currentEmberCLIVersion = parseFloat(process.env.OVERRIDE_DEPRECATION_VERSION ?? emberCLIVersion);
129
+
130
+ let significantUntil = until.replace(/(\.0+)/g, '');
131
+ return currentEmberCLIVersion >= parseFloat(significantUntil);
132
+ }
133
+
120
134
  module.exports = deprecate;
135
+ module.exports._isDeprecationRemoved = isDeprecationRemoved;
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ const { _isDeprecationRemoved } = require('./deprecate');
4
+
5
+ function deprecation(options) {
6
+ return {
7
+ options,
8
+ isRemoved: _isDeprecationRemoved(options.until),
9
+ };
10
+ }
11
+
12
+ const DEPRECATIONS = {
13
+ DEPRECATE_OUTPUT_PATHS: deprecation({
14
+ for: 'ember-cli',
15
+ id: 'ember-cli.outputPaths-build-option',
16
+ since: {
17
+ available: '5.3.0',
18
+ enabled: '5.3.0',
19
+ },
20
+ until: '6.0.0',
21
+ }),
22
+ DEPRECATE_TRAVIS_CI_SUPPORT: deprecation({
23
+ for: 'ember-cli',
24
+ id: 'travis-ci-support',
25
+ since: {
26
+ available: '5.5.0',
27
+ enabled: '5.5.0',
28
+ },
29
+ until: '6.0.0',
30
+ url: 'https://deprecations.emberjs.com/id/travis-ci-support',
31
+ }),
32
+ };
33
+
34
+ module.exports = DEPRECATIONS;
@@ -3,4 +3,5 @@
3
3
  module.exports = {
4
4
  assert: require('./assert'),
5
5
  deprecate: require('./deprecate'),
6
+ DEPRECATIONS: require('./deprecations'),
6
7
  };
@@ -529,7 +529,7 @@ let Blueprint = CoreObject.extend({
529
529
  @return {Promise}
530
530
  */
531
531
  async removeTypes(extension, code) {
532
- const { removeTypes } = require('remove-types');
532
+ const { removeTypes } = require('babel-remove-types');
533
533
 
534
534
  if (extension === '.gts') {
535
535
  const { Preprocessor } = require('content-tag');
@@ -115,6 +115,10 @@ class InteractiveNewTask extends Task {
115
115
  name: 'Travis CI',
116
116
  value: 'travis',
117
117
  },
118
+ {
119
+ name: 'None',
120
+ value: 'none',
121
+ },
118
122
  {
119
123
  name: 'Ignore/Skip',
120
124
  value: null,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-cli",
3
- "version": "5.12.0",
3
+ "version": "6.0.0",
4
4
  "description": "Command line tool for developing ambitious ember.js apps",
5
5
  "keywords": [
6
6
  "app",
@@ -104,7 +104,7 @@
104
104
  "promise-map-series": "^0.3.0",
105
105
  "promise.hash.helper": "^1.0.8",
106
106
  "quick-temp": "^0.1.8",
107
- "remove-types": "^1.0.0",
107
+ "babel-remove-types": "^1.0.0",
108
108
  "resolve": "^1.22.1",
109
109
  "resolve-package-path": "^4.0.3",
110
110
  "safe-stable-stringify": "^2.4.3",
@@ -1,7 +0,0 @@
1
- /**
2
- * Catch-all for ember-data.
3
- */
4
- export default interface ModelRegistry {
5
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
- [key: string]: any;
7
- }